WordPressプラグインの解析:Hello Dolly

WordPressを使用したWeb制作を生業としていると、開発を進めていく上でプラグインの開発やカスタマイズをする必要が出てきます。今日から、(主に気が向いたときに)そんなプラグインの開発・カスタマイズに役立つ情報をまとめてみたいと思います。

今日はまず、WordPress日本語版2.92.にバンドルされているHello Dollyの構造と機能を分析しながら、WordPressプラグインの作り方を考えてみたいと思います。

Ⅰ.Hello Dollyって何だろ?

これについては、WordPress Codexに詳しく書いてありました。

Hello Dolly(ハロー・ドリー)
これはただのプラグインではありません。ルイ・アームストロングによって歌われた最も有名な二つの単語に要約される、同一世代のすべての人々の希望と情熱を象徴するものです。これは世界で最初の WordPress 公式プラグインです。このプラグインが有効にされると、プラグイン管理画面以外の管理パネルの右上に「ハロー・ドリー」からの歌詞がランダムに表示されます。
プラグイン – WordPress Codex 日本語版:パッケージに含まれているデフォルトプラグイン

よく分からないYouTubeに行ってみると、「あぁ、これか!!」と思われる楽曲に出会えると思います。

Ⅱ.解析に必要なもの

ここから先を読み解くには以下のものを使用します。

  • Hello Dollyプラグイン…WordPress日本語版をDLして取り出す。(hello.php)
  • WordPress Codex日本語版:http://wpdocs.sourceforge.jp/
  • シンタックス・ハイライトできるテキスト・エディタ又はIDE(私はKaoriYa版Vim

Ⅲ.Hello Dollyの構造

早速、ファイルを開いてみましょう。全体で84行と短いので、その構造はシンプルです。順にその内容を確認してみます。

  1. コメント
  2. 2つのadd_action
  3. 3つのユーザー定義関数

1.コメント

プラグインの中に記述されるコメントは、もちろん開発用に記録されたものもありますが、WordPress管理画面でプラグインの情報として認識されるものです。Hello Dollyでは以下のようになっています。

/*
Plugin Name: Hello Dolly
Plugin URI: <a href="http://wordpress.org/#">http://wordpress.org/#
</a>Description: これはただのプラグインではありません。Louis Armstrong によって歌われた最も有名な二つの単語、Hello, Dolly に要約された同一世代のすべての人々の希望と情熱を象徴するものです。このプラグインが有効にされると、すべての管理画面の右上に &lt;cite&gt;Hello, Dolly&lt;/cite&gt; からの歌詞がランダムに表示されます。
Author: Matt Mullenweg
Version: 1.5.1
Author URI: <a href="http://ma.tt/">http://ma.tt/</a>
*/

以上の情報は、管理画面でのプラグイン名称や概要、バージョン情報等として扱われます。この辺りの詳細については、WordPress Codexのプラグインの作成にまとめられています。

2.2つのadd_action

プラグインの動作にはWordPressに内包されるプラグインAPIのフックへの関連付けが必要となります。例えば、index.phpのheaderが呼び出されるタイミングで実行、ログイン。フォームが読み込まれた終盤で実行等です。

フックには2種類あり、1つがHello Dollyの中でも使用されるアクションフック、もう1つがフィルターフックです。それぞれの詳細については、リンク先をご参照ください。

今回使用されているフックは、admin_footeradmin_headです。

admin_footer
管理画面各ページの<body>要素の終盤で実行する。
admin_head
管理画面各ページの<head>要素内で実行する。
プラグイン API/アクションフック一覧 – WordPress Codex 日本語版

Hello Dollyでは、admin_footerはHello Dollyの菓子を表示する為、admin_headはCSSを読み込む為に使用されています。

3.3つのユーザー定義関数

関数それぞれを確認してみます。

  • hello_dolly_get_lyric()
  • hello_dolly()
  • dolly_css()

まずは、hello_dolly_get_lyric関数から。関数名の通り、歌詞をランダムに取り出す為の関数です。コメントのうち、「//e」と書かれているものは私が加筆した部分です。

function hello_dolly_get_lyric() {
/** These are the lyrics to Hello Dolly */
//e 歌詞を変数に格納
$lyrics = "Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
I can tell, Dolly
You're still glowin', you're still crowin'
You're still goin' strong
//e ----------中略----------
Dolly'll never go away
Dolly'll never go away
Dolly'll never go away again";
// Here we split it into lines
//e 文字列を改行までで区切り、配列に格納
$lyrics = explode("\n", $lyrics);
// And then randomly choose a line
//e 配列の添え字によってランダムに出力
return wptexturize( $lyrics[ mt_rand(0, count($lyrics) - 1) ] );
}

難しい処理はありませんが、注意すべき点としてwptexturize関数が使用されています。この関数はWordPress標準の文字列出力を修正する為の関数です。ランダムに得た文字列をWordPressのルールに則って整形して返しています。

次に、hello_dolly関数です。hello_dolly_get_lyric関数で得られた文字列をpタグで囲って表示させます。

// This just echoes the chosen line, we'll position it later
function hello_dolly() {
$chosen = hello_dolly_get_lyric();
echo "<p id='dolly'>$chosen</p>";
}

この関数は、アクションフックのadmin_footerと関連付けられている為、管理画面の</body>タグ終盤で実行されます。

// Now we set that function up to execute when the admin_footer action is called
add_action('admin_footer', 'hello_dolly');

最後に、dolly_css関数です。管理画面のhead要素の中にCSSを記述します。コメントのうち、「//e」と書かれているものは私が加筆した部分です。

// We need some CSS to position the paragraph
function dolly_css() {
// This makes sure that the posinioning is also good for right-to-left languages
//e $xは文字列の表示方向によってleftまたはrightになる
$x = ( 'rtl' == get_bloginfo( 'text_direction' ) ) ? 'left' : 'right';
//e head要素内に記述するCSSの内容
echo "
<style type='text/css'>
#dolly {
position: absolute;
top: 4.5em;
margin: 0;
padding: 0;
$x: 215px;
font-size: 11px;
}
</style>
";
}

get_bloginf(‘text_direction’)は、文字列の表示方向を返します。日本語環境の場合にはもちろんrtl(R to L)です。言語環境に於いて、表示位置を切り替える配慮がされています。

この関数は、アクションフックのadmin_headと関連付けられている為、管理画面のhead要素内で実行されます。つまり、head要素にCSSを追記する形になります。

以上のように、2つの関数がフックによって適時実行されることで管理画面にHello Dollyの歌詞を表示しています。ポイントは、フックです。

Ⅳ.最後に

プラグイン開発の方法として、関数の定義とフックの関連付けができれば開発が可能!ということがわかります。

Hello Dollyはとてもシンプルなプラグインです。より複雑なものだと、管理画面にプラグイン専用のページを追加したり、データベースにテーブルを作成したり、JavaScriptを絡めたりと限りなくあります。

もちろん、自分で○○をしよう!と思った場合には、車輪の再開発を防止する為にも、求めている機能が実装されたプラグインが無いのか調べる方がbetterです。しかし、該当するプラグインが無い時、機能が惜しいプラグインがある時には、開発やカスタマイズが必要になります。フックとPHPについて理解できれば、大抵の機能は実装できそうです。

Ⅴ.次回

  • A案:何かプラグインを解析してみる
  • B案:何か思いついたらプラグインを作り始めてみる

おまけ

コメントを残す

メールアドレスが公開されることはありません。