WEBOPIXEL

WordPressのプラグインを開発しよう(初級編)

0911_s

Posted: 2012.09.11 / Category: WordPress / Tag: 

WordPressのプラグインを作れるようになればネットでちやほやされるかもしれない!?
ということでプラグイン開発方法をさらっと解説してみます。

Sponsored Link

※WordPressのバージョンは3.4を使用します。

プラグインってなんだろう。

WordPressのテンプレートをカスタマイズしてるとfunctions.phpにコードを書くことがあると思います。
基本的にこのコードをプラグインフォルダに入れるだけでプラグインになります。
そのテンプレートに依存したものはfunctions.phpに記述したままでもいいと思いますが、ある程度使い回せるものでしたらプラグイン化すると良いと思います。

簡単なプラグイン

簡単な例を見てみましょう。
functions.php に次のようなコードがあるとします。

functions.php

	function show_text() {
	    echo 'おはようございます。';
	}
	

これはテンプレートファイルに「<?php show_text(); ?>」と書くと「おはようございます。」と表示するだけのコードです。

これをプラグイン化してみます。
プラグインは「wp-content」→「plugins」に作成します。
ここでは「show-text」というフォルダを作成してその中に「show-text.php」というファイルを作成します。

プラグインファイルはコードの他にも「プラグイン名」や「説明」など、そのプラグイン情報も記述する必要があります。

show-text.php

	<?php
	/*
	Plugin Name: Show Text
	Plugin URI: http://www.example.com/plugin
	Description: テキストを表示するだけのプラグイン
	Author: my name
	Version: 0.1
	Author URI: http://www.example.com
	*/
	
	function show_text() {
	    echo 'おはようございます。';
	}
	

ファイルを作成すると管理画面のプラグイン一覧に今作成したプラグインが追加されます。

プラグイン一覧に表示された

プラグインを有効化するとfunctions.phpに記述したときと同等のことができるようになります。

管理画面で入力したテキストを表示するプラグイン

次は管理画面で入力した情報をそのままテンプレートファイルで表示するという、もう少しプラグインっぽいことをしてみます。

さきほどは関数が一つあるだけでしたが、今度はクラスベースで作成してみます。
「show-text.php」を下記のように置き換えます。

show-text.php

	class ShowText {
	    function __construct() {
	    }
	}
	$stext = new ShowText;
	

クラスを記述して、その場でインスタンス化(実行)しています。
「 __construct」はインスタンス化するときに実行されるメソッドです。この中に初期化など最初の処理を書いていきます。

オプション画面

テキストを入力するためにオプション画面を作成します。

show-text.php

	class ShowText {
	    function __construct() {
		  add_action('admin_menu', array($this, 'add_pages'));
	    }
	    function add_pages() {
		  add_menu_page('テキスト設定','テキスト設定',  'level_8', __FILE__, array($this,'show_text_option_page'), '', 26);
	    }
	    function show_text_option_page() {
		//オブション画面に表示する内容
	    }
	}
	$showtext = new ShowText;
	

コンストラクターで「admin_menu」フィルターを記述します。
いつもだったら

add_action(‘admin_menu’,’add_pages’);

と書くところですが、クラス内のメソッドを指定する場合は第2引数は$thisを含めた配列になります。

add_action(‘admin_menu’, array($this, ‘add_pages’));

6行目の「add_menu_page」でメニュー名やメニューを配置する位置を指定しています。
ここでは「コメント」ボタンの下に他のメニューと同階層に配置していますが、各ボタンのサブメニューで表示させたりといったこともできます。
詳しくはCodexをご確認ください。

管理メニューの追加 – WordPress Codex 日本語版

管理画面でメニューが追加されたのを確認してください。
内容はまだ書いていないので何も表示されませんね。

設定したメニュー

オプション画面の内容

「show_text_option_page」メソッドにオプション画面に表示する内容を書きます。

show-text.php

	function show_text_option_page() {
        //$_POST['showtext_options'])があったら保存
        if ( isset($_POST['showtext_options'])) {
            check_admin_referer('shoptions');
            $opt = $_POST['showtext_options'];
            update_option('showtext_options', $opt);
            ?><div class="updated fade"><p><strong><?php _e('Options saved.'); ?></strong></p></div><?php
        }
        ?>
        <div class="wrap">
        <div id="icon-options-general" class="icon32"><br /></div><h2>テキスト設定</h2>
            <form action="" method="post">
                <?php
                wp_nonce_field('shoptions');
                $opt = get_option('showtext_options');
                $show_text = isset($opt['text']) ? $opt['text']: null;
                ?> 
                <table class="form-table">
                    <tr valign="top">
                        <th scope="row"><label for="inputtext">テキスト</label></th>
                        <td><input name="showtext_options[text]" type="text" id="inputtext" value="<?php  echo $show_text ?>" class="regular-text" /></td>
                    </tr>
                </table>
                <p class="submit"><input type="submit" name="Submit" class="button-primary" value="変更を保存" /></p>
            </form>
        <!-- /.wrap --></div>
        <?php
    }
    

基本的には単純なフォームの作りですね。
「update_option」でデータベースの「wp_options」テーブルにレコードの追加や更新をすることができます。

これでテキストを入力する項目ができました。

オプション画面

テンプレートに表示するためのメソッド

オプションを読み込むだけなので必要ないかもしれませんが、一応テンプレートに表示する用のメソッドも作ってみます。

show-text.php

	function get_text() {
	  $opt = get_option('showtext_options');
	  return isset($opt['text']) ? $opt['text']: null;
	}
	

これでテンプレートファイルで次のようにすれば入力した内容が表示されます。

wp template

	<?php echo esc_html($showtext->get_text()); ?>
	
オリジナルのデータベース(テーブル)を作成する中級編はこちら!

参考サイト

Yuriko.Net » WordBench 資料「GPLとWordPress」「プラグインの作り方(管理パネル篇)」

COMMENTS

oraora 2013-12-14 23:58 

すみません、一つ質問よろしいでしょうか。
この2つの行なんですが、
・check_admin_referer(‘shoptions’);
・wp_nonce_field(‘shoptions’);

このshoptionsは何の文字列なんでしょうか??
適当な文字列でもいいのでしょうか。

もし出来ましたら、お教え下さい。お願いします。

webOpixel 2013-12-19 15:24 

2つとも同じ文字列なら適当なもので大丈夫です。
セキュリティの部分ですね。

adnac 2014-06-23 16:29 

まるっきり同じ作り方をして、呼び出したら

Call to a member function get_text() on a non-object

ってエラーが表示されるんですけど。

webOpixel 2014-06-24 14:01 

最初から全然動きませんか?

$showtext = new ShowText;

でインスタンスを作成しないとそのようなエラーが出るかもしれません。

adnac 2014-06-24 16:24 

$showtext = new ShowText;

これをして

get_text()); ?>

を書いたところで

Call to a member function get_text() on a non-object

が発生します。

webOpixel 2014-06-25 15:29 

プラグインは有効化していますか?
下記で全コードをアップしましたので確認してみてください。

https://gist.github.com/k-ishiwata/f3de9c8719838d056340

sw 2014-07-22 16:17 

テンプレートから呼び出す際の、
get_text()); ?>
のところですが、WordPressのバージョン3.9.1ではエラーでした。
以下のようにすればできました。
get_text()); ?>

sw 2014-07-22 16:18 

↑うまく記述できませんでした。

再度記述しますと、
テンプレート側からの呼び出しで、
$showtextは呼べませんでした。
いったん、global $showtext;とした上で呼び出すと呼び出せました。

WordPressのバージョンは3.9.1です。

webOpixel 2014-07-24 13:25 

エラーはどのようなエラーが表示されますか?
基本的には「global $showtext」をしなくても使えるはずなんですがなんでしょうね。。。

むら 2014-07-27 16:34 

自作の管理ページを作成しようとして、こちらにお邪魔いたしました。
大変参考になり、また、大変勉強になり、本当にありがとうございました。

さて、複数のテキストを一括で保存できる方法をお教え頂けないかと思い、
ご連絡させて頂きました。

このサイトでお教え頂いているコードを参考に、自作の管理ページを作っており、
管理ページからテキストを1つ入力することができるようになりました。

しかし、複数のテキストを入力しようとして、
全体をコビー&ペーストをベースにそれぞれの値を変えることで作成しましたが、
「変更を保存」を一括で(ワンクリックで)する変更はできませんでした。

大変、お手数かとおもいますが、
何卒、複数のテキストを一括でするには、どういうコード変更が必要なのかを
お教え頂けないでしょうか。

宜しくお願いいたします。

webOpixel 2014-08-07 13:28 

もう解決されているかもしれませんが、20行目のinput入力部分だけ増やしていく感じになると思います。(あと該当する変数なども)

LEAVE A REPLY

コードを書く場合は<pre>で囲んでください。