WP Total Hacks 0.4.0 とWordPress3.2で変わったことで気がついたこと。

WP Total Hacksをアップデートしました。

今回のアップデートはWordPress3.2への対応です。

ホントは新しい機能を実装したものをリリースする予定だったのですが、ビジュアルエディターまわりの処理が3.1と3.2の間で、互換性が無くなってしまったため、後始末に手こずりました。

このブログでも自作プラグイン上でビジュアルエディターを設置する方法について解説させていただきましたが、もう過去の遺物です。

以下では本来の趣旨とはちょっとかわりますが、WordPressプラグイン開発から見たビジュアルエディターなどの変更点についてご説明します。

3.2で変更されたビジュアルエディター関連の関数

自作プラグインでビジュアルエディターをつけることはあんまりないと思いますが…

wp_tiny_mce() と the_editor() 内の処理が大幅に変更された。

本来ならソースを上げて説明したいところですが、めんどくさいので省略します。

従来のWordPressではビジュアルエディターを出力するためのtiny mce用の設定をwp_tiny_mce()で出力して、そのあとでthe_editor()でビジュアルエディター用のHTMLを出力するという流れでした。

しかし、3.2以降ではthe_editor()のみで最低限必要な処理が出力されるようになり、wp_tiny_mce()をthe_editor()とあわせて実行するとJavaScriptやHTMLのコンフリクトが発生します。

どうやらカスタマイズしたエディターを出力するためのパラメータをwp_tiny_mce()やその他のフックでゴニョゴニョしなければならないようです。

ですが、もともとデフォルトのままだったので、今回はそのへんは追っかけていません。

前画面モード

WordPress3.2から追加された”なんちゃらかんちゃらモード”(フルスクリーンのあれですw)は、the_editor()実行時にフルスクリーン用のHTMLを出力するのですが、悲しいことにこのHTMLにはフックがありません。

なので、自作プラグイン側で the_editor() する際には以下のような感じで、フルスクリーン用のtinyMCEプラグインを解除する必要があります。

add_filter('tiny_mce_before_init', array(&$this, 'tiny_mce_before_init'), 999);

public function tiny_mce_before_init($init)
{
    $init['plugins'] = str_replace(
        array('wpfullscreen',',,'),
        array('', ','),
        $init['plugins']
    );
    return $init;
}

ちなみに上記のソースをそのまま使うと記事などの投稿画面でもボタンが消えちゃいますので、以下のページを参考に適切な条件分岐などをしましょう。

https://firegoby.jp/archives/2236

jQueryのバージョンアップによる変更

jQueryの1.6から $(‘foo’).attr(‘checked’); は、$(‘foo’).prop(‘checked’); に書き換えてねという情報を聞いていたんですが、その後1.6.1が再度リリースされて、従来の $(‘foo’).attr(‘checked’); でも動くようにしたよんということだったので、完全にタカをくくっていました。

実際にWordPress3.2に同梱されているjQueryは1.6.1なので、オッケーと思っていたんですが、実際には動きません。

というわけで、.attr(‘checked’) を、もし自作テーマなどで使用しているなら、.prop(‘chekced’) に変える必要があります。