「ちゃんとしたプラグイン開発ってどうやるの?」「おっきなプラグイン作ったらカオスった……」などの悩みを解決する方法をご存知だろうか? WordPressプラグイン用の雛形とそのGeneratorを使えば、そんな悩みとは無縁な上、スタートダッシュを決められる。
Contents
WordPress Plugin Boilerplate (WPPB)
WordPress Plugin Boilerplate(=WPPB)という、プラグインの雛形を提供しているオープンソースプロジェクトがこちら。WPPBから雛形をダウンロードし、自分の作るプラグインに合わせてプラグイン名などを置き換えて使う。
WordPress.orgによるPHPコード規約とドキュメント規約をこの雛形は守っているから、プラグイン作りで随時参考にすれば書き方としてはちゃんとした物が出来上がる。
WPPB自体はGithubで公開されている。
DevinVinson/WordPress-Plugin-Boilerplate
WordPress Plugin Boilerplate Generator
WPPBをカスタマイズし、プラグインに合わせて生成してくれるサービスがWordPress Plugin Boilerplate Generatorだ。
WPPBをベースにプラグインを作る際、プラグイン名や作者情報なんかは手動で置き換えないといけない。このサービスはそうした機械的に置換できるところを自動でやってくれる。う〜ん、至れり尽くせり。
余談 : YeomanからもWordPressプラグインが作れる
実はYeomanにもWordPressプラグイン用のGeneratorがある。
WebDevStudios/generator-plugin-wp
WPPBのGeneratorと同じくある程度自動でセットアップしてくれる。
WordPress Plugin Boilerplate Generatorの使い方
WordPress Plugin Boilerplate Generatorは簡単に使うことができる。
説明のために、WordPressにデフォルトで入っている無駄プラグイン『Hello Dolly』のジョブズ版を作ってみる。Hello Dollyは、ダッシュボードの右上にHello Dollyの歌詞の一部を表示するというだけの、Leave Me Alone Boxに毛が生えた程度に有用なプラグインだ。このプラグインをもじり、ジョブズの名言をダッシュボードに表示してみる。ヨダレを垂らしてプラグインを欲しがる意識高い系の姿が目に浮かぶ。
雛形の生成
まずはサービスにアクセスし、ページ中ほどのフォームにプラグイン名などを記入する。
すべてのフォームに記入し終わったら『BUILD』をクリックしよう。カスタマイズされた雛形をダウンロードできる。
オブジェクト指向でWordPressプラグイン作り
WPPBはWordPressプラグインをオブジェクト指向で作れるように設えられている。参考にするHello Dollyは一枚のPHPファイルにベタ書きしてあるから、これをWPPBの作りに合うようにわける。
どのように分けるか?Hello Dollyのソースを見てみると、『admin_notices』と『admin_head』にアクションフックをしかけている。前者は管理画面への歌詞の出力、後者は歌詞の見栄えを定めている。大きく見ると、フック登録と、呼び出されるロジックの2つの部分にわかれていることが分かった。
まずはフックの登録。管理画面系のフック登録はHello_Jobs::define_admin_hooks(class-hello-jobs.phpに記載)にまとめられているからここに移そう。
1 2 3 4 5 6 7 8 9 |
private function define_admin_hooks() { $plugin_admin = new Hello_Jobs_Admin( $this->get_plugin_name(), $this->get_version() ); $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' ); $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' ); $this->loader->add_action( 'admin_notices', $plugin_admin, 'hello_jobs' ); $this->loader->add_action( 'admin_head', $plugin_admin, 'jobs_css' ); } |
次に意識高い系垂涎のジョブズ名言を出力&スタイリングするロジックを移す。これは上記のフック登録で呼び出しているHello_Jobs_Admin内に記述する(class-hello-jobs-admin.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 |
public function hello_jobs() { $chosen = $this->hello_jobs_get_lyric(); echo "<p id='jobs'>$chosen</p>"; } public function jobs_css() { $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> "; } private function hello_jobs_get_lyric() { $lyrics = "もし今日が人生最後の日だとしたら、今やろうとしていることは 本当に自分のやりたいことだろうか? 未来を見て、点を結ぶことはできない。過去を振り返って点を結ぶだけだ。だから、いつかどうにかして点は結ばれると 信じなければならない。 結果の平等はともかく、機会というものは誰にでも平等であると固く信じている。 私は、本当に好きな物事しか続けられないと確信している。何が好きなのかを探しなさい。あなたの仕事にも、恋人にも。 自分もいつかは死ぬ。それを思い出すことは、失うものなど何もないということを気づかせてくれる最善の方法です。 量より質が重要だ。2本の二塁打より、1本のホームランのほうがずっといい。 デザインとは、単なる視覚や感覚のことではない。デザインとは、どうやって動くかだ。 重要なことに集中する唯一の方法は「ノー」と言うことだ。 我々がすることと同じくらい、我々がしないことを私は誇りに思う。 私は持っているテクノロジーをすべて引き替えにしても、ソクラテスとの午後のひとときを選ぶね。 墓場で一番の金持ちになることは私には重要ではない。夜眠るとき、我々は素晴らしいことをしたと言えること、それが重要だ。"; // 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 ) ] ); } |
首尾よくいけば、管理画面からドラスティックでフレキシブルなインサイトがアウトプットされるだろう。
WordPress開発について一番新しい参考書はこちら