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

Posted: 2012.09.11 / Category: WordPress / Tag: Plugin
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入力部分だけ増やしていく感じになると思います。(あと該当する変数なども)