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

31 мая 2015 г., 12:17:29
Просмотры: 59.3K
Голосов: 23

Я создал родительскую и дочернюю тему в одном из моих проектов. В родительской теме я подключил CSS и JavaScript следующим образом:

function project_necessary_scripts() {
    //Таблицы стилей
    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' );

    //JavaScript файлы
    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' );

Теперь в моей дочерней теме я хочу отключить некоторые таблицы стилей и скрипты. Для этого я использовал следующий код:

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 );
0
Все ответы на вопрос 3
4
47

Вы уже очень близки к решению, потому что идёте по правильному пути. Нужно лишь немного подкорректировать:

Существует два таких хука действий:

  1. wp_print_scripts, и
  2. wp_print_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' );

//Удаление JavaScript из очереди
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' );

Правильным способом является также отмена регистрации, помимо удаления из очереди. Сначала удалите их из очереди, а затем отмените их регистрацию соответствующим образом.

31 мая 2015 г. 12:17:29
Комментарии

согласно документации: Начиная с WordPress 3.3, не следует использовать wp_print_scripts для подключения стилей или скриптов. Вместо этого используйте wp_enqueue_scripts.

rokpoto.com rokpoto.com
6 февр. 2018 г. 00:12:43

@user1264304 Здесь мы не подключаем, а отключаем скрипты.

Mayeenul Islam Mayeenul Islam
6 февр. 2018 г. 06:31:17

да, но согласно ссылке, следует использовать add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')

rokpoto.com rokpoto.com
6 февр. 2018 г. 22:42:24

Вопрос и принятый ответ (этот) принадлежат одному и тому же человеку. Однако правильный способ — использовать действие wp_enqueue_scripts. Ответ от @morshed-alam-sumon является правильным методом. Единственная причина, по которой подключение к wp_print_scripts может работать, заключается в том, что оно срабатывает поздно. Технически, вы могли бы использовать любое действие, которое сработало после того, как оригинальный скрипт был добавлен в очередь с помощью wp_enqueue_scripts, но это не правильный подход. Причина делать это правильным способом заключается в том, что любой другой метод, который работает сейчас, не гарантирует, что он будет работать в будущем из-за изменений в ядре.

butlerblog butlerblog
26 мар. 2025 г. 13:55:31
0

Это неправильный способ. Начиная с WordPress 3.3, разработчики не рекомендуют использовать как wp_print_scripts, так и wp_print_styles.

Если вы добавляете или удаляете скрипты и стили, правильный способ следующий:

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

Не забывайте использовать приоритет. Без указания приоритета это не будет работать.

10 апр. 2021 г. 22:58:52
1

Для удаления скриптов (Dequeue Scripts) не добавляйте последние "-js" или "-css" в идентификаторе. Я использовал WordPress 5.8. У меня это сработало.

КОД ВЫШЕ:

// Удаление JavaScript
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' );

РАБОЧИЙ КОД:

// Удаление JavaScript
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr' );
        wp_deregister_script( 'modernizr' );
    wp_dequeue_script( 'project' );
        wp_deregister_script( 'project' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

Обязательно сначала проверьте исходный код страницы, чтобы узнать идентификатор скрипта, и удалите только последнюю часть "-js". Удаляйте только последний -js.

Например: Если ваш Script ID выглядит как project-js-js, то удалите только последний -js и используйте project-js в действии удаления. То же самое касается и CSS — удаляйте только последнюю часть "-css".

24 окт. 2021 г. 01:14:00
Комментарии

Это было ключевым для меня, я бился над этим часами. Спасибо.

cdsaenz cdsaenz
20 февр. 2022 г. 17:20:30