以前にwp_enqueue_scriptに関する記事を書いたことが有りましたが、いつの間にかこの方法だとエラーが出るようになっていたので対策を調べてみました。
これまでの手法はダメになったっぽい?
前回記事にした時は、functions.php でこのように書いていました。
1 2 3 4 5 6 7 8 9 10 |
function register_common_script() { if (!is_admin()) { $script_dir = get_template_directory_uri(); wp_deregister_script( 'jquery' ); wp_enqueue_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js',array(), false, false); wp_enqueue_script( 'cssfx', $script_dir.'/lib/cssfx.min.js', array(), false, false ); wp_enqueue_script( 'respondjs', $script_dir.'/lib/respond.min.js',array('jquery'), false, true); } } add_action('init','register_common_script'); |
しかし、この方法だと WP_DEBUG が TRUE の時、ログイン画面や管理画面で次のようなエラーがでるようになりました。
Notice: wp_deregister_script が誤って呼び出されました。管理画面では jquery
スクリプトの読み込みをオフにしないでください。フロントエンドテーマだけをターゲットにするには、wp_enqueue_scripts
フックを使いましょう。 詳細は WordPress のデバッグをご覧ください。 (このメッセージはバージョン 3.6 で追加されました) in (ファイル名) on line (行番号)
(オフの時は確認してませんが、動作しないとなるともしかしたら表示されなくなってるのかも…?)
原因を考える
どうも、これまでのように、init にフックした上で if (!is_admin()){} として管理画面では動かないようにする、という手法だけではダメになったようです。
読み込みの順番とかがなんか内部の処理とかが変化したのでしょうか?
で、どうすればいいか
エラーの中にしっかりと「wp_enqueue_scripts フックを使いましょう」と書いてありますね。
なので、フック先を init から wp_enqueue_scripts に変更します。
1 2 3 4 5 6 7 8 9 10 |
function register_common_script() { if (!is_admin()) { $script_dir = get_template_directory_uri(); wp_deregister_script( 'jquery' ); wp_enqueue_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js',array(), false, false); wp_enqueue_script( 'cssfx', $script_dir.'/lib/cssfx.min.js', array(), false, false ); wp_enqueue_script( 'respondjs', $script_dir.'/lib/respond.min.js',array('jquery'), false, true); } } add_action('wp_enqueue_scripts','register_common_script'); |
これでエラーは消えました。
よかったよかった、です。
コメントする