Сценарии удаления из очереди для всех страниц, кроме домашней страницы
Я пытаюсь удалить из очереди некоторые скрипты из плагина, который мне нужен только для домашней страницы. Для домашней страницы я использую файл с именем front-page.php
с этим сверху, чтобы сделать его шаблоном home
:
<?php
/*
Template Name: Home
*/
?>
Функция удаляет скрипты, но удаляет их на всех страницах. Я хочу, чтобы сценарии загружались только для домашней страницы. Я пробовал if ( !is_page_template('home.php') ) {
, а также if ( !is_front_page() ) {
, но оба они дали тот же результат, что и первый.
function wpcyclone_dequeue_script() {
wp_dequeue_script( 'jquery-cycle2' );
wp_dequeue_script( 'jquery-cycle2-swipe' );
wp_dequeue_script( 'cyclone-client' );
}
if ( !is_page('Home') ) {
add_action( 'wp_print_scripts', 'wpcyclone_dequeue_script', 100 );
}
Где я ошибся?
2 answers
Всего несколько заметок о вашем коде
Вы должны удалить из очереди и отменить регистрацию сценария, чтобы полностью удалить его из глобальной
$wp_scripts
Вы не должны использовать
wp_print_scripts
, это неправильный крючок. Вы должны использоватьwp_enqueue_scripts
Не заключайте свое действие в условность. Ваш условный тег может быть установлен на ранний или поздний и может привести к неожиданному поведению.
Существует специальный условный тег для главной страницы,
is_front_page()
который вы можете использовать, чтобы проверить, является ли ваша страница главной страницей
Ваш код должен выглядеть примерно так
add_action( 'wp_enqueue_scripts', 'my_deregister_javascript', PHP_INT_MAX );
function my_deregister_javascript() {
if ( !is_front_page() ) {
wp_dequeue_script( 'jquery-cycle2' );
wp_deregister_script( 'jquery-cycle2' );
wp_dequeue_script( 'jquery-cycle2-swipe' );
wp_deregister_script( 'jquery-cycle2-swipe' );
wp_dequeue_script( 'cyclone-client' );
wp_deregister_script( 'cyclone-client' );
}
}
Неважно, я понял это другим способом:
add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );
function my_deregister_javascript() {
if ( !is_page('Home') ) {
wp_deregister_script( 'jquery-cycle2' );
wp_deregister_script( 'jquery-cycle2-swipe' );
wp_deregister_script( 'cyclone-client' );
}
}
Все еще любопытно, почему предыдущий способ не сработал.