wp_deregister_script(‘jquery’)で動画・音声ウィジェットが動かなくなった
管理しているテーマとプラグインを最近はずっと触っているが、その際に出くわした思わぬ惨事。
WordPress4.7系だか4.8系だかで動画ウィジェットと音声ウィジェットが追加されたが、WordPress4.9.1にアップグレードした途端に問題発生。
wp_deregister_script(‘jquery’)→wp_enqueue_script()でincludesのjQueryからホストしているjQueryに切り替えた際に、この動画ウィジェットと音声ウィジェットが動かなくなった<(^o^)>
まぁ動かなくなった・・・と書いてしまうとなんかすごい適当。具体的にはこんな感じの事が起こっていた。
- wp_deregister_script(‘jquery’)でincludesのjQueryを削除。
- wp_enqueue_script()でホストしているjQueryに切り替える。
- あら不思議、動画ウィジェットと音声ウィジェットに必要なライブラリであるmediaelement-and-player.min.jsが消えているじゃないか。(ついでに他のWPデフォルトのスクリプト群もね)
で、これの問題として何が原因だったかというとね。
wp_deregister_script('jquery'); wp_enqueue_script('jquery_1_4_2', 'jQueryパス');
こんな感じでwp_enqueue_script()で第一引数に’jquery_バージョン’とかやっていたのが問題だったらしい。
バージョン4.9.1にアップグレードする前は別にこの記述でも問題なかったはずなのだが・・・。
いや、そもそもmediaelement-and-player.jsってそもそもjQuery依存のJSライブラリではないはずなんだが・・・。
で、まぁこれ、WP公式に書いてあるようにコードをそのままコピペして、
wp_deregister_script('jquery'); wp_enqueue_script('jquery', 'jQueryパス');
で、やらにゃあかんらしい。じゃないと、動画ウィジェットと音声ウィジェットが漏れなく仏さんになります。
どうやら第一引数の’jquery’をキーに他のパッケージされているスクリプト全てが出力されている様子。
でも、なんでJSで書かれたmediaelement-and-player.jsがJSのライブラリであるはずjQueryと一緒くたになっているか腑に落ちん。
イベントリスナー引っ掛けるときにでもjQueryを使用してるんやろか。
何にしても、ウィジェットはjQueryを外そうが外さまいが使うときは使うものなので、公式パッケージされているウィジェットがフロントエンドスクリプトの有無で動作が左右される仕様というのが何とも腑に落ちないところだ。
せめてjQueryに依存してないライブラリはこれとは別個にしてほしいもんだ・・・。
まぁ、ワンオフテーマには全く無縁な話だけど、僕みたいにテーマを配布してたり、他の方みたいにテーマ販売している場合は注意したほうがいいかもしれない。