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

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

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

簡単なプラグイン

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

functions.php

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

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

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

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

show-text.php

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

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

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

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

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

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

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

show-text.php

  1. class ShowText {
  2. function __construct() {
  3. }
  4. }
  5. $stext = new ShowText;

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

オプション画面

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

show-text.php

  1. class ShowText {
  2. function __construct() {
  3. add_action('admin_menu', array($this, 'add_pages'));
  4. }
  5. function add_pages() {
  6. add_menu_page('テキスト設定','テキスト設定', 'level_8', __FILE__, array($this,'show_text_option_page'), '', 26);
  7. }
  8. function show_text_option_page() {
  9. //オブション画面に表示する内容
  10. }
  11. }
  12. $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

  1. function show_text_option_page() {
  2. //$_POST['showtext_options'])があったら保存
  3. if ( isset($_POST['showtext_options'])) {
  4. check_admin_referer('shoptions');
  5. $opt = $_POST['showtext_options'];
  6. update_option('showtext_options', $opt);
  7. ?><div class="updated fade"><p><strong><?php _e('Options saved.'); ?></strong></p></div><?php
  8. }
  9. ?>
  10. <div class="wrap">
  11. <div id="icon-options-general" class="icon32"><br /></div><h2>テキスト設定</h2>
  12. <form action="" method="post">
  13. <?php
  14. wp_nonce_field('shoptions');
  15. $opt = get_option('showtext_options');
  16. $show_text = isset($opt['text']) ? $opt['text']: null;
  17. ?>
  18. <table class="form-table">
  19. <tr valign="top">
  20. <th scope="row"><label for="inputtext">テキスト</label></th>
  21. <td><input name="showtext_options[text]" type="text" id="inputtext" value="<?php echo $show_text ?>" class="regular-text" /></td>
  22. </tr>
  23. </table>
  24. <p class="submit"><input type="submit" name="Submit" class="button-primary" value="変更を保存" /></p>
  25. </form>
  26. <!-- /.wrap --></div>
  27. <?php
  28. }

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

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

オプション画面

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

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

show-text.php

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

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

wp template

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

参考サイト

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