Как правильно удалить сценарии и стили в дочерней теме?

11

Я сделал родительскую тему и дочернюю тему в одном из моих проектов. Я поставил в очередь CSS и JavaScripts в моей родительской теме, как показано ниже:

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 );
Mayeenul Ислам
источник

Ответы:

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' );

И правильный путь - отменить их регистрацию, кроме выгрузки. Поэтому сначала удалите их из очереди, а затем отмените их регистрацию.

Mayeenul Ислам
источник
Согласно документации : Начиная с WordPress 3.3, wp_print_scripts не должен использоваться для постановки в очередь стилей или скриптов. Вместо этого используйте wp_enqueue_scripts.
Рок
@ user1264304 Мы здесь не ставим вещи в очередь, мы их снимаем.
Mayeenul Islam
1
да, но по ссылке нужно использоватьadd_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
rok