2012/12/27

Wordpress3.5(追記:3.5.1も) と HeadSpace2

腰かけSE様よりご指摘をいただき訂正:2013-03-23)

WordPressのプラグインHeadSpace2の設定画面で、「ページモジュール」表示中に、

  • モジュールのドラッグ&ドロップができない。
  • メニューバーの「メニューを閉じる」でメニューは閉じない。
  • モジュールの「編集」ボタンをクリックすると、おそらく表示しているページにappendかprependされるだろう要素が無装飾で表示されてしまう。
という問題に出くわした。


WordPressは最近バージョンが3.5になったらしいのだけれど、そもそも最近になって使い始めたものだから前のバージョンだったら動くのかもわからない。

ただ、なんとなくだけど上記の症状から jQuery か jQuery ui の挙動がおかしい感じがする。。。


GoogleChromeの“要素を検証”で確認

対象のページで
右クリック > “要素を検証(N)” > “Resources”
で load-scripts.php にエラーを発見。

やっぱり jQuery の読込み時にエラーが発生しているみたいだ。


jQuery関連のバージョンダウンでサクッと解決

調べてみるとWordPressが3.5になったときに、jQuery 関連のバージョンも変更されていたので、
とりあえず WordPress3.4.2 に内包されている jQueryフォルダ(/wp-includes/js内) をアップロードしてみたら、上記3つの問題は全て解決。

他のプラグインとかで問題が出てくるかもしれないが、今のところは何も起きていない。


注意

おそらくWordPressのアップグレードに伴うjQueryのバージョン変更により、HeadSpaceが正常に動作しなくなったものと考えていますが、実際はどこがどうエラーを起こしているかまでは検証してはおりません。


追記:WordPress3.5.1でも同じような症状にでくわした。

上記と同様にjQueryフォルダを3.4.2のものと入れ替えても解決しないので、
フォルダ内を覗いてみると3.4.xから3.5.xのときにjsのファイル名が変わってた。

jQuery
[wp3.4]jquery.js(ver.1.7.2) ⇒ [wp3.5]jquery.js(ver.1.8.3)
非圧縮ファイル
[wp3.4]jquery.xxx.dev.js ⇒ [wp3.5]jquery.xxx.js
圧縮ファイル
[wp3.4]jquery.xxx.js ⇒ [wp3.5]jquery.xxx.min.js
追加ファイル
[wp3.5]jquery.masonry.min.js
uiフォルダ内
みてない

つまり、WordPress3.4.2内のjQueryフォルダを読込ませるだけでは、load-script.phpscript-loader.php はちゃんとjsファイルを読込めてないということだから、 WordPress3.5.1の load-script.phpscript-loader.php 内のjQuery関連のjsファイル読込み部分を書き換えることで解決するはず。

でも面倒だったので、機能不全にはなっても致命的エラーはないだろうと高を括って WordPress3.4.2のload-script.phpscript-loader.phpと入れ替えて解決。 ちなみに、WordPress3.4.2のload-script.phpscript-loader.phpだと122行目、3.5.1だと127行目あたりでjQuery関連を読込んでいる。


さらに追記:最終的な解決方法

上記の方法でHeadSpaceは動くようになった。が、管理画面上でフォーム部品(主にボタン)の描写と挙動がおかしくなった。

あるじゃないか、致命的なエラー。描写はともかく挙動がおかしくなるのは困る。


ということで不完全燃焼気味の応急処置の方法は、以下のようになる。

  1. /wp-includes/js/jQuery//wp-includes/load-script.phpscript-loader.phpを3.4.2のものと入れ替える。
  2. HeadSpaceの設定をする(以後、変更しないでいいように入念に)。
  3. /wp-includes/js/jQuery//wp-includes/load-script.phpscript-loader.phpを3.5.xのものに戻す。

jQueryフォルダ交換とload-script.phpscript-loader.php内のjQuery読込み部分のみの書換をした場合については未検証。