WordPressで外部のjQueryなどを参照させる方法と、重複読み込みさせない作法
基本ですが、自分用メモ。
WordPress のとあるプラグインが使っている jQuery を新バージョンに差し替えたい。とか、自前ホストしているものでなくて、Google CDN から読ませたい場合などに使える方法です。
プラグインのソースに手を加えるのはイヤだし。と思ったら基本作法だった様子。
また、自作テンプレートやプラグインから jQuery を使う際に、複数回読み込ませない作法にも触れます。
WordPress用プラグインが使うjQueryを差し替える(wp_register_script)
WordPress 用プラグインが使う jQuery を、Google CDN 上の 1.10.1 に差し替える場合は、functions.php などに以下のコードを書くと良いでしょう。
if (!is_admin()) { // 管理画面のjQueryは変えない wp_deregister_script('jquery'); wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js', false, null); }
モバイル向けに別バージョンの jQuery を使う事もできます。
if (!is_admin()) { // 管理画面のjQueryは変えない wp_deregister_script('jquery'); if (IS_MOBILE_THEME) { // 自前でモバイル判別定数を作成 // mobile -> jQuery 2.x wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js', false, null); } else { // Other -> jQuery 1.x wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js', false, null); } }
wp_deregister_script() は、Wordpress がデフォルトで登録済みのハンドルの上書きに必要です。つまり、ハンドル ’jquery’ は登録済み。という事。
WordPress で登録済みの「スクリプト用ハンドル」一覧は以下にあります。
引数の詳細も上記公式サイトから。今回は外部の jQuery を参照させているため、クエリストリングを削除させるパラメータを喰わせています。
管理者チェックをしているのは、ダッシュボードの jQuery を別バージョンに差し替えると一部機能が動かなかったためです。というか、PC向けは差し替えないほうがいいのかも。という気もしなくはありませんが。詳細は不明です。
自前のテンプレートでjQueryを読ませる場合 - プラグインとの重複を避ける(wp_enqueue_script)
プラグインの jQuery 読み込みとの重複を回避しつつ、自前テンプレートで jQuery を読み込ませるには、自前テンプレート内で以下のように記述します。
<?php wp_enqueue_script('jquery');
詳細仕様は公式サイトを確認ください。
こうすれば、jQuery を読んでいるプラグインを無効化しても jQuery を読んでくれますし、プラグインを有効化しても、(まっとうな書き方のプラグインなら)重複読み込みされません。
実は、今回の主要件は、プラグイン「WordPress Popular Posts」が、設定・訪問者によって jQuery を読んだり読まなかったりするので、テンプレート側で確実に jQuery を読ませたかった事、とか、モバイル・PC向けに違う ver の jQuery を使わせたい。とかとかから色々掘っていって辿り着いた。という感じ。
しかし WordPress は設計がしっかりしているので本当に助かります。