
WordPress のテーマやプラグインを作る人には常識だと思うけど、
「jQuery のプラグインが動かない!」
というお悩みはこれが原因であることが一番多いし
自分もこれで嵌まったことがあるので。
$ は使えない
jQuery ではこんな表現を使うことがあると思うんだけど
$('#switch').click(function () {
$('#panel').show();
});
この $ は WordPress 標準の jQuery では使えません。
WordPress が標準で読み込む jQuery だと、こんな感じになりますね。
jQuery('#switch').click(function () {
jQuery('#panel').show();
});
要するに、一般に $ で表される jQuery オブジェクトを
WordPress では jQuery で表すことになります。
そもそもが逆
これについて
「WordPress では $ の代わりに jQuery が定義されている」
と説明されているのを見ることがあるんだけど、
これ逆じゃないでしょうか。
本来 jQuery オブジェクトは jQuery という名前で表すもので、
それの別名として $ が定義されてるんじゃなかったかな。
コードの中で何回もジェークエリージェークエリー書くのめんどくさいから。
なので、正しくは
「WordPress では、jQuery の代わりに定義されている $ が使えない」
なんじゃないかと思います。
そうなっている理由
今は JavaScript のライブラリとして
jQuery が圧倒的な存在感を示してるけど、
他にも便利なものはありますね。
jQuery を使うようになる前は prototype.js のお世話にもなってました。
こういった他のライブラリでも $ が使われていて、
そのままでは $ が jQuery を指すのか他のものを指すのかわからなくなるので
WordPress では標準の jQuery 側が道を譲って
「うちは $ を使わないからそちらでどうぞ」
ということになってるんだと思います。
どこでそうなっているか
WordPress で読み込まれている jQuery のコースコードを見ると
最後にこういう記述があると思います。
jQuery.noConflict();
これを呼び出すと、$ が jQuery ではなく
先に定義された動作に戻るんですね。
なので jQuery 側ではエイリアス $ が使えなくなってjQuery と記述することになります。
それでも $ を使いたい
なので jQuery を使ったコードやプラグインが WordPress で動かない場合$ を jQuery に書き換えてみたらいいと思うんだけど、
それでも jQuery で $ を使いたいという場合もあるかと思います。
絶対必要な場面は思いつかないけど、
書きかえるのがめんどくさいとか。
どうしても $ を使いたい場合の対応方法は
WordPress のドキュメントにも書かれてます。
こういうラッパーを作って
jQuery(document).ready(function($) {
// この関数の中では $() が jQuery() のエイリアスとして機能するよ
});
その中にコードを書けば $ も動きます。
ようするにこの関数の中でだけ、$ に jQuery が渡されるということですね。
ただ上記のラッパーはページ読み込みが完了した時点で動くので、
何らかの理由で即座にコードを実行したい場合
(function($) {
// この関数の中では $() が jQuery() のエイリアスとして以下同文
})(jQuery);
を使うこともできます。
まあできればページ読み込み後の実行でいいような作りにしといた方が
汎用性が高いし後でメンテナンスするのも楽だと思うけど。
それでも動かない場合
がんばってください!