目次
WordPress のプラグイン “Hello Dolly” が何をやっているのか、 PHP のコードを追って調べてみました。
WordPress プラグイン Hello Dolly とは
WordPress に標準で入っているプラグインで、 管理画面に ルイ・アームストロング の歌の歌詞の一節をランダムに出してくれます。
WordPress のプラグインの説明には、 次のように記載されています。
これは単なるプラグインではありません。Louis Armstrong が歌った最も有名な二つの単語「Hello, Dolly」に要約された、世代全体の希望と熱意を象徴しているのです。このプラグインを有効化すると、すべての管理画面の右上に Hello, Dolly からの歌詞がランダムに表示されます。
“Hello Dolly” のソースコードから挙動を読み取る
“Hello Dolly” で使っている PHP ファイル はわずかひとつです。 プラグインの学習も兼ねて読んでみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?php /** * @package Hello_Dolly * @version 1.6 */ /* Plugin Name: Hello Dolly Plugin URI: http://wordpress.org/extend/plugins/hello-dolly/ Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page. Author: Matt Mullenweg Version: 1.6 Author URI: http://ma.tt/ */ function hello_dolly_get_lyric() { /** These are the lyrics to Hello Dolly */ $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 We feel the room swayin' While the band's playin' One of your old favourite songs from way back when So, take her wrap, fellas Find her an empty lap, fellas Dolly'll never go away again 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 We feel the room swayin' While the band's playin' One of your old favourite songs from way back when Golly, gee, fellas Find her a vacant knee, fellas Dolly'll never go away Dolly'll never go away Dolly'll never go away again"; // Here we split it into lines $lyrics = explode( "n", $lyrics ); // And then randomly choose a line return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] ); } // 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>"; } // Now we set that function up to execute when the admin_notices action is called add_action( 'admin_notices', 'hello_dolly' ); // We need some CSS to position the paragraph function dolly_css() { // This makes sure that the positioning is also good for right-to-left languages $x = is_rtl() ? 'left' : 'right'; echo " <style type='text/css'> #dolly { float: $x; padding-$x: 15px; padding-top: 5px; margin: 0; font-size: 11px; } </style> "; } add_action( 'admin_head', 'dolly_css' ); ?> |
ファイル冒頭に、コメントで Plugin Name
, Plugin URI
, Description
, Author
, Version
, Author URI
を記述しています。 最低でも Plugin Name
はプラグインに必要です。
このファイル内に関数は3つあります。 hello_dolly_get_lyric
, hello_dolly
, dolly_css
の3つです。
hello_dolly_get_lyric
-
“Hello Dolly” の歌詞から1行を選んで返す関数です。
mt_rand
でランダムにインデックスを取得して使っていますね。wptexturize
はテキストを WordPress のフォーマットに合わせる関数で、 WordPress 5 でも使えます。歌詞の中には “Dolly’ll never go away” という行が2行あります。 ほかにも同じ行は複数ありますね。
mt_rand
でランダムに行を出力していますが、 重複行を取り除いていませんので、 それらの重複する行は選ばれる確率が高いことになります。 hello_dolly
-
hello_dolly_get_ryric
から1行取り出して HTML にして表示する関数です。 これによって返される HTML が WordPress のページに表示されます。p
タグ のid
属性 はdolly
になっています。 hello_css
-
表示するメッセージに適用する CSS を
style
タグ のコンテンツとして表示する関数です。is_rtl
は使用している言語が右寄せなのか左寄せなのかを判定する関数で、 使用言語にあわせて表示を調整しているのがわかります。
これらの関数定義の他に、ファイル内では2つのアクションが追加されています。
add_action('admin_notices', 'hello_dolly');
-
アクションイベント
admin_notice
でhello_dolly
を実行するように指定しています。admin_notice
は 管理画面の通知エリアの表示タイミングを指しており、 「プラグインを有効化しました」などのメッセージもこのアクションで表示されています。 add_action('admin_head', 'dolly_css');
-
アクションイベント
admin_head
でdolly_css
を実行するように指定しています。admin_head
は管理画面を開くときのhead
タグ 生成時のイベントで、 ここで出力するテキストはhead
タグ 内 に出力されます。
プラグインを発展させる
シンプルなプラグインの使い方がわかったところで、コードを変更して新しくプラグインができないか考えてみましょう。
たとえば日付にあわせてまいにち、修造! 心を元気にする本気の応援メッセージ のメッセージを表示させるのも面白そうですね。
PHP で日付を取得するには次のようにします。 東京のタイムゾーンで日付を取得します。
1 2 3 4 5 6 7 8 9 |
$dateTime = new DateTime(); $dateTime->setTimeZone(new DateTimeZone('Asia/Tokyo')); $year = (int) $dateTime->format('Y'); $month = (int) $dateTime->format('m'); $day = (int) $dateTime->format('d'); $hour = (int) $dateTime->format('H'); $minute = (int) $dateTime->format('i'); $second = (int) $dateTime->format('s'); |