加载-{$PAGE HOOK}并返回参数

时间:2020-03-07 作者:Toniq

我正在使用此代码将脚本和样式排队到wordpress插件。这很好,但我想知道在my\\u admin\\u enqueue\\u scripts函数中是否有一些参数可用?因为我想在每页上查询不同的脚本。我知道我可以调用不同的函数,如my\\u admin\\u enqueue\\u scripts、my\\u admin\\u enqueue\\u scripts 2、my\\u admin\\u enqueue\\u scripts 3,但我仍然需要重复许多脚本才能排队,所以我想知道我是否可以检测到my\\u admin\\u enqueue\\u scripts函数中的页面。

    add_action("admin_menu", "my_admin_menu");

    function my_admin_menu(){

        $menu = add_menu_page(\'Audio Player\', \'Audio Player\', MY_CAPABILITY, \'my_settings\', \'my_settings_page\', \'dashicons-playlist-audio\');

        $submenu = add_submenu_page(\'my_settings\', __(\'Audio Player\', MY_TEXTDOMAIN), __(\'Settings\', MY_TEXTDOMAIN), MY_CAPABILITY, \'my_settings\', \'my_settings_page\'); 
        $submenu2 = add_submenu_page(\'my_settings\', __(\'Audio Player\', MY_TEXTDOMAIN), __(\'Player manager\', MY_TEXTDOMAIN), MY_CAPABILITY, \'my_player_manager\', \'my_player_manager_page\');  

        add_action( \'load-\' . $menu, \'my_admin_enqueue_scripts\' );
        add_action( \'load-\' . $submenu, \'my_admin_enqueue_scripts\' );
        add_action( \'load-\' . $submenu2, \'my_admin_enqueue_scripts\' );

    }


    function my_admin_enqueue_scripts($param) {

        //is there a $param here?

        wp_enqueue_script(\'jquery\');
        wp_enqueue_script(\'jquery-ui-sortable\');
        wp_enqueue_media();

        wp_enqueue_style("spectrum", plugins_url(\'/css/spectrum.css\', __FILE__));
        wp_enqueue_script("spectrum", plugins_url(\'/js/spectrum.js\', __FILE__), array(\'jquery\'));   


            .... other scripts


    }

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

//is there a $param here?

hook 您使用的不会向回调传递任何参数。

但您可以使用admin_enqueue_scripts hook 它传递当前菜单页的挂钩名称—钩子名称也保存在全局文件中$hook_suffix 变量然后您可以使用get_plugin_page_hookname() 获取特定菜单页的挂钩名称,然后有条件地将菜单页的脚本排队。

function my_admin_enqueue_scripts( $hook_suffix ) {
    switch ( $hook_suffix ) {
        // Enqueue scripts for the "Audio Player -> Settings" page.
        case get_plugin_page_hookname( \'my_settings\', \'\' ) :
            //wp_enqueue_script( ... );
        break;

        // Enqueue scripts for the "Audio Player -> Player manager" page.
        case get_plugin_page_hookname( \'my_player_manager\', \'my_settings\' ) :
            //wp_enqueue_script( ... );
        break;
    }
}
add_action( \'admin_enqueue_scripts\', \'my_admin_enqueue_scripts\' );
实际上,你应该使用admin_enqueue_scripts 用于将管理脚本排入队列的挂钩。:)

此外,在您的第一次add_submenu_page() 调用时,只需省略第六个参数(即回调),而将其设置为my_settings_page, 防止函数在同一页上被调用两次。