サポート » テーマ » functions.phpで名前空間を指定したあと、wp_enqueue_scriptsを使うとエラーになる。

  • muro

    (@muromuro)


    
    namespace test;
    
    function test_enqueue_scripts() {
    	wp_enqueue_style("normalize", "https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.css");
    	wp_enqueue_style("style", get_template_directory_uri() . "/assets/style.css");
    	wp_enqueue_script("script", get_template_directory_uri() . "/assets/script.js");
    }
    add_action("wp_enqueue_scripts", "test\test_enqueue_scripts");
    

    プラグインなどと関数名が重複しても問題ないよう、自作中のテーマのfunctions.phpに上記のようにwp_enqueue_scriptsを使って、公開画面上で読み込むcssとjsを指定しました。

    しかし、実際に公開画面を開いてみると、下記のエラーメッセージが表示されて、cssとjsを読み込むことができませんでした。

    
    Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'test	est_enqueue_scripts' not found or invalid function name in /var/www/html/wp-includes/class-wp-hook.php on line 286
    

    ‘test est_enqueue_scripts’というように、間が抜けて表示されていますが、入力ミスではなく、実際にこのとおり表示されています。

    名前空間を指定したあとでは、wp_enqueue_scriptsを使うことはできないのでしょうか?
    なお、admin_enqueue_scriptsなど、公開画面ではなく管理画面に変更を加えるようなフックに関しては、名前空間を指定しても、エラーになることなく使うことができました。

    • このトピックはmuroが4年、 8ヶ月前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    ダブルクオーテーション内のバックスラッシュ(\)はエスケープする必要があります。

    add_action("wp_enqueue_scripts", "test\test_enqueue_scripts");

    add_action("wp_enqueue_scripts", "test\\test_enqueue_scripts");

    または

    add_action( 'wp_enqueue_scripts', 'test\test_enqueue_scripts' );

    トピック投稿者 muro

    (@muromuro)

    回答ありがとうございます。
    ダブルクオートのままでバックスラッシュを2つ、あるいはシングルクオートに書き直すことで、‘test est_enqueue_scripts’になっていた現象は解決しました。
    しかし、依然としてエラーメッセージが出たままです。

    問題の根本的解決とはならないのですが、名前空間ではなく、アクションフックで行うことは無名関数に書くことにしました。
    関数名を考える手間もなく、なおかつ何度も実行する関数ではないので、無名関数にした方が作業が早いと思い、しばらくはこちらで運用しようと思います。

    
    add_action("wp_enqueue_scripts", function() {
    	wp_enqueue_style("normalize", "https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.css");
    	wp_enqueue_style("style", get_template_directory_uri() . "/assets/style.css");
    	wp_enqueue_script("script", get_template_directory_uri() . "/assets/script.js");
    });
    

    こんにちは

    いま手元に環境がないのでエラーが解消するかわかりませんが、名前空間からグローバルな関数をコールするには完全修飾で、関数名の頭にバックスラッシュが必要な気もしますが・・・

    ところで、関数名の衝突を避けるのは、クラスを使ったほうが便利だと思います。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「functions.phpで名前空間を指定したあと、wp_enqueue_scriptsを使うとエラーになる。」には新たに返信することはできません。