Сценарии удаления из очереди для всех страниц, кроме домашней страницы


Я пытаюсь удалить из очереди некоторые скрипты из плагина, который мне нужен только для домашней страницы. Для домашней страницы я использую файл с именем 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 );
}

Где я ошибся?

Author: Desi, 2014-12-08

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' );
    }
}
 7
Author: Pieter Goosen, 2014-12-08 05:23:30

Неважно, я понял это другим способом:

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

Все еще любопытно, почему предыдущий способ не сработал.

 1
Author: Desi, 2014-12-08 04:01:24