wordpress Notice: wp_deregister_script が誤って呼び出されました

2014年5月30日

wp-config.php の 「define(‘WP_DEBUG’, false);」を「define(‘WP_DEBUG’, true);」にしたところログイン画面で以下のような Notice エラーが表示された。

Notice: wp_deregister_script が誤って呼び出されました。管理画面では jquery スクリプトの読み込みをオフにしないでください。フロントエンドテーマだけをターゲットにするには、wp_enqueue_scripts フックを使いましょう。 詳細は WordPress のデバッグをご覧ください。 (このメッセージはバージョン 3.6 で追加されました) in C:\xampp\htdocs\xxxxxx\wp-includes\functions.php on line 3245

問題となった箇所

原因は functions.php に記述されていた以下の部分。

WordPress がデフォルトで同梱している jQuery ライブラリの代わりに jQuery を CDN から読み込む際に「wp_deregister_script」を使っていて、かつ「wp_print_scripts」フックを使っている点。

function add_my_scripts() {
  if(is_admin()) return; //管理画面にはスクリプトは追加しない(管理画面の条件分岐)
  wp_deregister_script( 'jquery');  //jQuery を CDN から読み込む準備
  wp_enqueue_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', array(), '1.10.2', false);
  wp_enqueue_script( 'jquery-mig', '//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js', array(), '1.2.1', false);
  wp_enqueue_script('base', //「base.js」をロード
    get_template_directory_uri(). '/js/base.js',
    array('jquery'),
    '20140513'
  );
}
add_action('wp_print_scripts', 'add_my_scripts');

add_action() の「wp_print_scripts」フックを「wp_enqueue_scripts」フックに変更。

function add_my_scripts() {
  if(is_admin()) return; 
  wp_deregister_script( 'jquery');  
  wp_enqueue_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', array(), '1.10.2', false);
  wp_enqueue_script( 'jquery-mig', '//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js', array(), '1.2.1', false);
  wp_enqueue_script('base', 
    get_template_directory_uri(). '/js/base.js',
    array('jquery'),
    '20140513'
  );
}
add_action('wp_enqueue_scripts', 'add_my_scripts');

エラーが消えた。

Plugin API/Action Reference/wp enqueue scripts

このフックはスタイルシートの読み込みにも使えるみたい。

参考になるサイト:wp_enqueue_script のススメ(dogmap.jp)