サポート » プラグイン » ページフック名を指定したadmin_print_scriptsフックの利用

  • 解決済 redcocker

    (@redcocker)


    アクションフックの「admin_print_scripts」は、「admin_print_scripts-ページフック名」とすることで、特定のページにのみJavaスクリプトを組み込めるようなので、プラグインで生成したオプションパネルにのみJavaスクリプトを組み込むために

    add_action('admin_menu', 'my_register_menu_item');
    
    function my_register_menu_item() {
    	register_setting('my-settings-group', 'my_value1');
    	register_setting('my-settings-group', 'my_value2');
    
    		.
    		.
    		.
    
    	add_option('my_value1', 1);
    	add_option('my_value2', 1);
    
    		.
    		.
    		.
    
    	add_options_page('My plugin Options', 'My plugin', 'manage_options', 'my-plugin-options', 'my_plugin_options_panel');
    }
    
    		.
    		.
    		.
    
    add_action('admin_print_scripts', 'my_jscript_for_admin');
    
    function my_jscript_for_admin(){
    	wp_enqueue_script('my_js', 'XXXX/my-script.js', false, '1.0');
    }

    http://wpdocs.sourceforge.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7
    http://wpdocs.sourceforge.jp/Adding_Contextual_Help_to_Administration_Menus

    を参考にして

    add_action('admin_menu', 'my_register_menu_item');
    
    function my_register_menu_item() {
    	register_setting('my-settings-group', 'my_value1');
    	register_setting('my-settings-group', 'my_value2');
    
    		.
    		.
    		.
    
    	add_option('my_value1', 1);
    	add_option('my_value2', 1);
    
    		.
    		.
    		.
    
    	global $my_page_hook;
    	$my_page_hook = add_options_page('My plugin Options', 'My plugin', 'manage_options', 'my-plugin-options', 'my_plugin_options_panel');
    }
    
    		.
    		.
    		.
    
    add_action("admin_print_scripts-$my_page_hook", 'my_jscript_for_admin');
    
    function my_jscript_for_admin(){
    	wp_enqueue_script('my_js', 'XXXX/my-script.js', false, '1.0');
    }

    に変更しました。

    add_options_page()の返り値が、ページフック名になるようなので、返り値を$my_page_hookに格納し、グローバル化しています。

    ところが、上手く機能していないようで、スクリプトは追加されず、エラーも発生しません。

    しかし、$my_page_hookには、ページフック名がきちんと格納されています。

    値は

    settings_page_サブメニューのスラッグ
    ※サブメニューのスラッグ = add_options_page()の第4引数

    になっていました。

    ちなみに

    add_action('admin_print_scripts-'.$my_page_hook, 'my_jscript_for_admin');

    とした場合も同じ結果になります。

    最悪、

    add_action('admin_print_scripts-settings_page_サブメニューのスラッグ', 'my_jscript_for_admin');

    とすれば上手く行くのですが、ベタ書きは避けたいので、お分かりになる方がおられましたら、どうかご教示下さい。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    redcockerさん、こんにちは。

    実行タイミングの問題ではないでしょうか。
    全てのソースをみたわけではないので、合っているかどうかわかりませんが、my_register_menu_item は、admin_menuのフックで実行されます。
    一方、add_action('admin_print_scripts-'.$my_page_hook, 'my_jscript_for_admin');は、functionの外にあるようなので、ファイルが読み込まれた時点で実行されてしまい、$my_page_hook が空の文字列になってしまっているのではと思います。

    下記は、WP Total Hacksのコードで同様の事を行っていましたので、参考のコードとして呈示しておきます。

    public function admin_menu()
    {
        $hook = add_options_page(
            $this->page_title,
            'WP Total Hacks',
            $this->role,
            'wp-biz',
            array(&$this, 'options')
        );
    
        add_action("admin_head-".$hook, array(&$this, 'admin_head'));
        add_action('admin_print_scripts-'.$hook, array(&$this, 'admin_scripts'));
        add_action('admin_print_styles-'.$hook, array(&$this, 'admin_styles'));
        add_action("admin_init", array(&$this, 'admin_init'));
    }
    トピック投稿者 redcocker

    (@redcocker)

    jim912さん

    ご回答有難うございます。
    ご指摘のとおり、タイミングの問題だったようです。

    下記の通りに変更したところ、上手く機能しました。

    add_action('admin_menu', 'my_register_menu_item');
    
    function my_register_menu_item() {
    	register_setting('my-settings-group', 'my_value1');
    	register_setting('my-settings-group', 'my_value2');
    
    		.
    		.
    		.
    
    	add_option('my_value1', 1);
    	add_option('my_value2', 1);
    
    		.
    		.
    		.
    
    	$my_page_hook = add_options_page('My plugin Options', 'My plugin', 'manage_options', 'my-plugin-options', 'my_plugin_options_panel');
    	add_action('admin_print_scripts-'.$my_page_hook, 'my_jscript_for_admin');
    }
    
    		.
    		.
    		.
    
    function my_jscript_for_admin(){
    	wp_enqueue_script('my_js', 'XXXX/my-script.js', false, '1.0');
    }
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「ページフック名を指定したadmin_print_scriptsフックの利用」には新たに返信することはできません。