最近仕事でWordPressのテーマやプラグインのコードに触れています。
WordPressには「結果を標準出力に出力する」か「返り値(文字列)として返す」かというフラグを引数に持つ関数がとても多い。
下記のコードは同じ動きをする。(実際にthe_titleの上記フラグは第三引数ですが分かりやすくするために簡略化しています。)
// エントリのタイトルを出力する
<?php the_title(); ?>
komagata [p0t]
<?php echo the_title(false); ?>
komagata [p0t]
本体にこういう関数が多いため、プラグインでも暗黙的にその動作を求められる。
何で後者がデフォルトじゃないのか。そもそも、
// エントリのタイトルを出力する
<?= the_title() ?>
komagata [p0t]
こうじゃ駄目なのか?
これはショートタグがマナー違反とされているため、<?php echoと書くのが面倒でこうなっているんではないでしょうか。
そもそも何故ショートタグが色々なコーディング規約で非推奨になっているのかも理解出来ない。XML宣言と同じ事はそれ程問題なんだろうか。何かセキュリティーホールがあるのかな?
テーマの中で<?php echo とわざわざ書かなければいけないせいで、テンプレートがウリのPHPの良さが損なわれている気がしてならない。
WordPressではthe_xxx()という名前だからといって必ず上記の機能を持っているわけではない。そもそも返り値を返さない関数も多い。
リファレンスを見ると、最近のバージョンになるにつれてthe_xxx()は関数内で出力、get_the_xxx()は文字列として返り値を返すというルールが出来つつあるっぽいが統一されそうな気配は無い。
この手の瑕があちこちに見られます。大勢に使われることで成長してきたソフトウェアだから仕方のない事だと思います。しかし、もう大きく舵を切らないとマズいところに来ていると感じました。
特に安価なレンタルサーバーで動くことが大きな長所であるWordPressは無料からあるクラウド環境に対応出来ないと今後生きていけないと思う。
それにはデータベースの抽象化がほぼ必須だ。このまま生SQL CREATE文を抱えた大量のプラグインと一緒に沈没していく危険性が高い。
僕の考えたWordPress生き残り戦略
- 今のAPIは期限付きDeprecatedで残しつつ、クリーンでデータベース非依存のAPIを作る。(本家がやらなくても、プラグイン制作者用ライブラリを作るでも良い)
- PHP4の排除運動に便乗して一緒に旧API依存プラグイン/テーマを推奨しない運動を広める。(新APIへ対応するプラグイン/テーマ開発者・ユーザーをAutomattic社とか作者のMattとかが賞賛しまくる。)
- プラグイン・テーマのバージョンを見て、管理画面で嫌な警告を出す。
- 1〜2年後ぐらいに旧APIを削除(ドーン!)
- ユーザーはいつの間にかクラウドに対応してる。
地味で当たり前で退屈な方法だけど今はじめないと手遅れになると思いました。