Как правильно отключить скрипты и стили в дочерней теме?
Я создал родительскую и дочернюю тему в одном из моих проектов. В родительской теме я подключил 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 );

Вы уже очень близки к решению, потому что идёте по правильному пути. Нужно лишь немного подкорректировать:
Существует два таких хука действий:
Таким образом, вы можете сделать это так: подключите их по-разному:
//Удаление стилей из очереди
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' );
Правильным способом является также отмена регистрации, помимо удаления из очереди. Сначала удалите их из очереди, а затем отмените их регистрацию соответствующим образом.

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

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

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

Это неправильный способ. Начиная с 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 );
Не забывайте использовать приоритет. Без указания приоритета это не будет работать.

Для удаления скриптов (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".
