WordPressのプラグインを作る Hello Worldと概要

Wordpressのプラグインを作ります。基本的にはWordpressに使い慣れていて、PHPの知識があれば誰でも作ることができます。基礎から順に詳細に説明してゆこうと思います。手始めにまずはHello Worldでしょう。ちなみにプラグインについての全体概要は公式ページが詳しいです。

Hello Worldプラグインを作る

helloworld
WordpressでPluginをインストール(アップロード)する場所は、
wpDir/wp-content/plugins/
になります。今回はwp-helloworldというフォルダーを作成してhello_world.phpをプラグインの本体として作成します。
Hello Worldを表示させるプラグインのソースは以下になります。[hello_world.php]
<?php
/**
* @package Hello_World
* @version 1.0
*/
/*
Plugin Name: Hello World
Plugin URI: http://www.omnioo.com/record/
Description: This is not just a plugin.
Author: osamuya
Version: 1.0
Author URI: http://www.omnioo.com/record/profile/
*/

function the_hello_world() {
print 'Hello world';
}

簡単なソースですが順に説明してゆくと、プラグインの実態となるphpファイルには、/*コメント*/でもってプラグイン情報を書き込む規則になっています。というのもWordpressのプラグインはphpファイルの中身を読み取るのもそうですが、この冒頭のコメントをプラグインであるかどうかの認識に利用しています。実際に最低限必要なプラグイン情報はPlugin Name: xxxxxのみなのでこれだけ書けばphpコード自体がからでも管理画面からプラグインとして認識してくれます。
/*
Plugin Name: Hello World
*/

次にfunctionを書きます。function名は、いわゆるwpタグといわれるものになります。テーマ中のPHPコードの中で実行できます。

helloworld_onちなみにindex.phpには何を書くかというと実は空っぽです。index.phpにプラグイン本体のコードを書いても問題ありませんが、わかりやすく明示的なファイル名で書いた方がいいですし、何となく伝統的にindex.phpは空にしておく習慣があります。
Wordpressはテーマでも同様ですが、コメントアウトの内容を読み込んでテーマのメタ情報であるとか、プラグインであるとかを判断します。所定の書式で書くことでそれらを自動的に判断するようになっています。

ソースを書き終わって準備ができたら、./wp-helloworld/wp-hello_world.phpという構造でプラグインフォルダーにアップロードします。管理画面のプラグイン一覧でプラグインが表示されていたら成功です。表示されていなかったら何らかのコーディングミスがあります。表示されていたら早速「有効化」してみてください。
(ちなみにこのHello WorldプラグインはTim Trott氏作の同名のプラグインに上書き(更新)されてしまいますのでご注意。テスト後は削除してください。)

テーマのテンプレート内のHello Worldを呼び出した場所に、
<?php the_hello_world(); ?>
を書きます。
「Hello World!」という文字が表示されていたら成功です。
これでPlugin作成の一連の手続きは終了です。

sampleimg_helloworld

Wordpressのプラグインの構造

Wordpressを作っている言語がPHPであることは周知の事実ですが、WP内で使用できるWPタグなるものは、実際のところただのPHP関数です。いわゆるユーザー定義関数というものでWPがWP内で使える関数です。Pluginはその機能に関数を加える作業をしています。ですので、基本的にはPHPと何1つ変わるところはありません。PHPの関数も同様に使用できます。
ではプラグインの機能がどのようにしてWordpressのカスタマイズに影響を与えるのかというと、Wordpressがデフォルトで動作する(機能する)そのポイント(フックポイント)というものに操作を加えたり、制限したり削除したりすることができます。フックポイントとは、例えば画像を記事内に投稿する際には、WP特有のclassやtitleなどimgタグ内に自動的に埋め込みます。この機能は画像本体とそれぞれのメタ情報をHTMLとして出力するときの「フックポイント」です。このポイントにお好みの機能を加え、ば自動的に付加されるimgタグに特有のクラスを与えたり、imgタグにから利用していないidやclassなどをすべて削除したります。
Wordpressのフックポイントは数多くあります。たいていのカスタマイズには事足りるでしょう。

このフックポイントとはPHP的にいうとそれぞれの機能を保持したユニット関数であると同時にCMSのそれぞれの動作を個別に制御しています。ですので、フックを使わないプラグインは殆どないと言っても過言ではありません。プラグイン制作には欠かせないものです。

また、Pluginは何もすべて自分で作成する必要がありません。便利なものはすでに何でもあります。使えるものは使った方が得策でしょう。

Plugin内の関数はどんなものか
Worpressをカスタマイズしているうちに気がつくことではあるのですが、オリジナルテーマを作成する際のfunctions.phpはテーマ内の様々な機能を制御しますが、実はPluginと殆ど同様の動作をします。多少の違いはあれ、同じ関数を使うことができます。特に完全にオリジナルのテーマを作成する際にはfunctions.phpに追加したい機能はPluginにして機能を追加しても全く同じ関数で全く同じ動作になります。どちらを編集するのが容易かといえば、私個人の感覚ではfunctions.phpですが、広くその機能を共有するとう意味ではPluginの方が貢献度が高いわけです。
例えばテーマ内で検索フォームのHTMLタグをカスタマイズするとします。funcitons.phpには以下のようなソースを書くことになります。
function my_search_form( $form ) {
$image_path = get_bloginfo('template_directory');

$form = '<form role="search" name="searchform" id="searchform" method="get" action="'.home_url('/').'">
<input type="text" value="' . get_search_query() . '" name="s" id="keywords" />
<input type="image" src="'.$image_path.'/common/images/search-btn.gif" id="searchBtn" alt="検索" />
</form>';
return $form;
}
add_filter( 'get_search_form', 'my_search_form' );

このコードはそのままPluginにも使うことができます。