将特定页面中的脚本入队

时间:2013-09-09 作者:artist learning to code

我正在用带有选项的主题仪表板构建wordpress主题,但当我在某处阅读时,我使用的排队脚本代码只是在后端将其排队,但它会加载到后端的每个页面。所以我有一些js冲突。。。

我有以下代码:

add_menu_page($themename, $themename, \'administrator\', basename(__FILE__), \'ikos_admin\');
add_submenu_page(basename(__FILE__), $themename . \' Options\', \'Theme Options\', \'administrator\',  basename(__FILE__),\'ikos_admin\'); // Default
}


function ikos_add_init() {

    $file_dir=get_bloginfo(\'template_directory\');
    wp_enqueue_style("ikosCss", $file_dir."/functions/theme-options.css", false, "1.0", "all");
    wp_enqueue_script("ikosScript", $file_dir."/functions/theme-options.js");
    wp_enqueue_script("ikospickerScript", $file_dir."/functions/color-picker.js", array( \'farbtastic\', \'jquery\' ) );
    wp_enqueue_style( \'farbtastic\' );
    wp_enqueue_style( \'farbtastic\' );
    wp_register_script(\'my-upload\', $file_dir."/functions/upload.js");
    wp_enqueue_script(\'my-upload\');

        if(function_exists( \'wp_enqueue_media\' )){
        wp_enqueue_media();
}else{
        wp_enqueue_style(\'thickbox\');
        wp_enqueue_script(\'media-upload\');
        wp_enqueue_script(\'thickbox\');
      }

}
那么,我如何将这些脚本仅排在特定的管理页面中???谢谢:D

EDIT是的,现在它正在工作!使用钩子的新代码,然后我添加了var\\u dump($hook\\u后缀);就在@kaiser在评论中告诉我的中止/返回语句之前,它打印了:**string(0)”“string(27)”toplevel\\u page\\u theme-options“**。

所以我刚刚在ikos\\u add\\u init($hook\\u后缀)中添加了“toplevel\\u page\\u theme-options”,它可以工作!

$hook_suffix = add_menu_page($themename, $themename, \'administrator\', basename(__FILE__), \'ikos_admin\');
add_submenu_page(basename(__FILE__), $themename . \' Options\', \'Theme Options\', \'administrator\',  basename(__FILE__),\'ikos_admin\'); // Default

}


add_action( \'admin_enqueue_scripts\', \'ikos_add_init\' );

function ikos_add_init($hook_suffix) {
    if ( \'toplevel_page_theme-options\' !== $hook_suffix )
    return;
    $file_dir=get_template_directory_uri();
    wp_enqueue_style("ikosCss", $file_dir."/functions/theme-options.css", false, "1.0", "all");
    wp_enqueue_script("ikosScript", $file_dir."/functions/theme-options.js");
    wp_enqueue_script("ikospickerScript", $file_dir."/functions/color-picker.js", array( \'farbtastic\', \'jquery\' ) );
    wp_enqueue_style( \'farbtastic\' );
    wp_enqueue_style( \'farbtastic\' );
    wp_register_script(\'my-upload\', $file_dir."/functions/upload.js");
    wp_enqueue_script(\'my-upload\');

        if(function_exists( \'wp_enqueue_media\' )){
            wp_enqueue_media();
}else{
        wp_enqueue_style(\'thickbox\');
        wp_enqueue_script(\'media-upload\');
        wp_enqueue_script(\'thickbox\');
      }

}

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

在…内admin-header.php, 有以下一组挂钩:

do_action(\'admin_enqueue_scripts\', $hook_suffix);
do_action("admin_print_styles-$hook_suffix");
do_action(\'admin_print_styles\');
do_action("admin_print_scripts-$hook_suffix");
do_action(\'admin_print_scripts\');
do_action("admin_head-$hook_suffix");
do_action(\'admin_head\');
到的那个always 使用它admin_enqueue_scripts, 样式表均为and 脚本。More info in this answer.

它还有一个额外的参数$hook_suffix. 此参数为exactly 与从中获取的返回值相同add_submenu_page() 以及相关(速记)功能。

示例

注意:下面的示例假设您之前已经注册了脚本,因此它的句柄/标识符为your_handle.

add_action( \'admin_enqueue_scripts\', \'wpse113509_register_script\' );
function wpse113509_register_script( $hook_suffix )
{
    if ( \'dashboard.php\' !== $hook_suffix )
        return;

    wp_enqueue_script( \'your_handle\' );
}
其他注意事项,如我所见,您正在使用get_option(\'template_directory\'), 我必须留下一个简短的补充说明,因为现在的情况不是这样的,因为这些信息来自希望避免的DB。它还将忽略为以下内容设置的默认过滤器:

  • get_template_directory() - 父主题根目录的路径get_stylesheet_directory() - 到子主题根目录的路径get_template_directory_uri() - 指向父主题根目录的URLget_stylesheet_directory_uri() - 指向子主题根目录的URLplugin_dir_path( __FILE___ ) - 当前文件的根目录,无论是在子/父主题还是插件中。尾部斜杠结果wp_get_theme(), 调用的实例WP_Theme 对于当前活动主题。

    $current_theme = wp_get_theme();
    $current_theme->get_theme_root();
    $current_theme->get_template();
    $current_theme->get_template_directory();
    
    如果你有一个儿童主题,你也可以打电话$current_theme->parent() 访问所有其他WP_Theme 父主题实例上的方法。例如:。

    $current_theme->parent()->get_theme_root();
    
    这样还可以访问主题的标题信息。例如Name, DomainPath, 等

SO网友:Doug Cassidy

查看要将js排入队列的页面的URL。可能是这样的

/wp-admin/edit.php?post_type=cpt&page=thisfile.php
那就这样用吧

if($_GET[\'page\'] == \'thisfile.php\' AND is_admin())
    wp_enqueue_script(\'media-upload\');

结束