プラグインとテーマの 2.3 から 2.5 への移行

WordPress CodexMigrating Plugins and Themes (プラグインとテーマの移行) の中の 2.3 から 2.5 への移行 の箇所の訳です。

いずれ日本語版の Codex にもコピーするつもりです。誤字脱字誤訳、より良い訳がありましたらお知らせください。また、(たしか)原文のライセンスが GPL なんでこの訳も GPL です。

*******

テーマは、バージョン 2.5 では大きな影響はないでしょう。プラグインにはいくつかの変更による影響があるかもしれません。

管理メニューの変更

(これを書いている時点での)次期バージョン 2.5 でプラグインに影響を与える一番の変更は WordPress 管理画面とメニューの徹底的な見直しです。メニューが少しだけ再編されました。標準的な方法で管理メニューを追加しているのならたいていのプラグインはおそらく正しく動作しますが、調整が必要なプラグインもあるかもしれません。

管理画面

WordPress 2.5 では管理画面のフォーマットやマークアップが変更されたため、投稿編集画面やその他の管理画面に(プラグインの設定画面や表示画面などの)セクションを追加していたプラグインは、これまでのように管理画面に調和させてもともと組み込まれていたようには見せられなくなります。また、バージョン 2.3 以前で、プラグインがさまざまな画面に情報を追加するために使用していたフックのいくつかが取り除かれ、投稿、ページ、リンク編集画面に追加できるセクションを定義するための add_meta_box 関数を利用した新しい API が用意されました。(この関数についての説明ページができるまで、wp-admin/includes/template.php でドキュメントヘッダを参照できます)

したがって、プラグイン作者は WordPress 2.5 用に新しいバージョンのプラグインをリリースするか、(できれば)バージョンを検知して適切なフォーマットを使用する判定ロジックのようなものをプラグインに入れる必要があります。これには新しい関数 add_meta_box が定義されているかどうかを検知する方法が良いでしょう。例えば:

if (function_exists('add_meta_box')) {
 // 2.5 のロジックで、画面を定義する add_meta_box を呼び出します
} else {
 // 2.3 のロジックで、add_action( 'dbx_post_advanced' ) などを呼び出します
}

メモ: WordPress 初期化プロセスの終わりに function_exists テストを実行すること!この関数はプラグイン初期化時には読込まれません。ですので、’admin_menu’ アクションもしくは新しい ‘admin_init’ アクション内での実行をおすすめします。

起動(アクティベーション)グローバルスコープ

いくつかのプラグインに影響を与えるかもしれないもう一つの変更点は、WordPress 2.5 では、プラグインの起動フックが関数内の非グローバルスコープ内で実行されると言うことです(以前はグローバルスコープ内で実行されていました)。これはつまり、プラグインが起動フックを持ち、そのフックが呼び出す関数がそのプラグインファイル内で定義されているグローバル変数を頼りにしているのなら、そのプラグインは正しく動作しないかもしれない、ということです。その場合必要になるのは、そのプラグインのグローバルスコープレベルでこうした変数に “global” 宣言を追加することで、これで上手くいくはずです。例えば:

global $my_plugin_variable;
$my_plugin_variable = 3;

function my_plugin_activation_function() {
   global $my_plugin_variable;

   // rest of activation function
}

TinyMCE

まもなくやってくる WordPress 2.5 には完全に書き直された TinyMCE 3 が含まれます。この API ではたくさんの変更があるのでボタンを追加するすべての WordPress のプラグインは更新が必要になります。まずは次を参照するといいでしょう:
http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit
http://wiki.moxiecode.com/index.php/TinyMCE:API

もちろん、カーソルのある場所に何かのコードを挿入するボタンの追加は以前と同様にとても簡単です。”pagebreak(改ページ)”プラグインが良い例となるでしょう。

プラグインの読み込みには新しいフィルター $mce_external_plugins があり、これは配列 ‘name’ => ‘url’ を取得し、この配列を zip 化された TinyMCE に挿入します。URL には絶対アドレス(ホスト名有りでも無しでも)を使用したほうがいいでしょう。相対アドレスの使用は(WordPress のプラグインによって変更されうる)デフォルト値を維持するため init 配列にいくつかの設定を施す必要があり、このため相対 URL を使用する外部プラグインの読み込みを阻害する可能性があります。TinyMCE は別ドメインからのプラグインを読込まないでしょう。

gzip コンプレッサーも変更されました。TinyMCE のすべてのパーツを集め、一つのステップで zip ファイルに出力するようになりました。”mce_options” アクションはサポートされますが廃止予定です。アクション “tinymce_before_init” はフィルター “tiny_mce_before_init” に置き換えられ、TinyMCE のすべての設定を持つ配列に適用されます。また、zip 化されたファイルはディスクにキャッシュされ、メモリ/サーバーのリソースをいくらか節約します。このキャッシュは init 配列に少しでも変更があった場合や tiny_mce_config 呼び出し時の ver=[number] 引数の変更により無効化されます。バージョンは /wp-includes/script-loader.php に定義されている “tiny_mce_version” によってフィルタをかけられているのでプラグインで変更できます。

言語ファイルの読み込みにも変更があります。言語コードは ISO 639-1 のみで、これは de、fr、es などのように WordPress ロケールの最初の 2 文字です。TinyMCE はプラグインが読み込まれると langs/[lang].js を読み込み、もしプラグインにポップアップがあるとポップアップを開いたときに langs/[lang]_dlg.js を読み込みます。

デフォルトの言語文字列の読み込みも変更されました。すべてが tinymce/langs/wp-langs.php 内に定義されるようになったので、メインの .pot ファイルに含めることができるようになり、WordPress で利用可能なすべての言語に翻訳できるようになりました。プラグインはこのすべての文字列を利用できます。どのようにこの文字列を参照するのかは TinyMCE が読み込まれたときに tinyMCE.i18n js オブジェクトをチェックしてください。

*******