如何正确地使子主题中的脚本和样式出队?


11

我在一个项目中制作了一个父主题和一个子主题。我将CSS和JavaScript放入了父主题中,如下所示:

function project_necessary_scripts() {
    //Stylesheets
    wp_register_style( 'bootstrap-css', get_template_directory_uri() .'/css/bootstrap.min.css' );
    wp_register_style( 'bootstrap-map', get_template_directory_uri() .'/css/bootstrap.css.map' );
    wp_register_style( 'project-css', get_stylesheet_uri() );

    wp_enqueue_style( 'bootstrap-css' );
    wp_enqueue_style( 'bootstrap-map' );
    wp_enqueue_style( 'project-css' );

    //JavaScripts
    wp_register_script( 'modernizr-js', get_template_directory_uri() .'/js/modernizr-2.8.3.min.js', array(), '2.8.3' );
    wp_register_script( 'project-js', get_template_directory_uri() .'/js/project.min.js', array('jquery'), '20150401', true );

    wp_enqueue_script( 'modernizr-js' );
    wp_enqueue_script( 'project-js' );
}
add_action( 'wp_enqueue_scripts', 'project_necessary_scripts' );

现在,在“ 儿童”主题中,我想出队一些样式表和JavaScript。所以我用下面的代码:

function project_dequeue_unnecessary_scripts() {
    wp_dequeue_style( 'bootstrap-map' );
    wp_dequeue_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

但是实际上bootstrap.css.map文件仍在排队,但是modernizr-js project-js没有加载,因此它可以部分工作。我该如何解决?

我什至尝试了行动优先级:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );

Answers:


24

您正走在正确的道路上,因此离解决方案更近了。只是进行一些调整:

有两个这样的动作挂钩:

  1. wp_print_scripts
  2. wp_print_styles

因此,您可以执行以下操作:以不同的方式钩住它们:

//Dequeue Styles
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

//Dequeue JavaScripts
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr-js' );
        wp_deregister_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
        wp_deregister_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

正确的方法是在出队的同时注销他们。因此,首先要使它们出队,然后相应地注销它们。


根据docs自WordPress 3.3起,wp_print_scripts不应用于加入样式或脚本。请改用wp_enqueue_scripts。
rok

@ user1264304我们不在这里排队,我们正在排队。
Mayeenul Islam

1
是的,但是根据链接,应该使用add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.