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

11

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

Это здорово, но они намного более продвинуты, чем я хочу.

Мне кажется, что ответом является использование встроенной is_page()функции ( кодекса ), но когда я пытаюсь ее использовать, сайт ломается или просто не работает.

Я думаю, что я просто выполняю условную логику в неправильном месте.

Вот что я пытался добавить в мои functions.php:

function wpse39130_register_more_stylesheets() {
    wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/stylesheet.css' );
}
add_action( 'init', 'wpse39130_register_more_stylesheets' );

function wpse39130_conditionally_enqueue_my_stylesheet() {
    // only enqueue on product-services page slug
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Когда я удаляю условную часть, таблица стилей успешно ставится в очередь, поэтому я знаю, что это работает.

Эван Маттсон
источник
На самом деле я также использовал копирование и вставку вашего кода и его работы с очень сильным текстом
abhishek abhi Abhi

Ответы:

4

Я скопировал, вставил твой код в мою среду разработки, ничего не изменил, кроме имени страницы, и он работает просто отлично. Вы уверены, что это не ставится в очередь, и вы просто указали неправильно или что страница не названа неправильно или что-то еще?

mor7ifer
источник
1
Спасибо, это работает! Я не знаю, почему это не сработало раньше. Наверное, произошли странные вещи. Надеюсь, это пригодится кому-то еще.
Эван Маттсон
2

То, что у вас есть, правильно - вы просто подключаете это к неправильному действию. Попробуйте действие «wp» вместо «init». Когда запускается init, is_page () не будет работать должным образом.

РЕДАКТИРОВАТЬ: я не прав. Я думал, вы добавили add_my_stylesheet к init, но это не так. is_page должен работать из действия enqueue_scripts. Извините ... продолжайте ...

MathSmath
источник
-1

Я пытался следовать тому же коду и посмотреть, смогу ли я получить тот же результат, что я заметил is_page () не работает, как ожидалось. поэтому я последовал за глобальной переменной $ post и проверил название категории / слаг, а последние используют простое сравнение текста, чтобы принять решение о действии.

    global $post;
    $postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
 echo esc_html( $postcat[0]->ID );   // Debug 
 echo esc_html( $postcat[1]->name ); // Debug 
 echo var_dump($postcat ); // Debug 
}

Значение категории, если ее только одна категория (не подкатегория) будет

echo esc_html( $postcat[0]->name ); //Display name on screen

Для подкатегории у вас будет заполнена следующая переменная

echo esc_html( $postcat[1]->name ); //Display name on screen

Теперь, исходя из ваших потребностей, используйте код ниже, как я использую для проверки названия подкатегории:

//Use $postcat[0]->name for parent category name Can be your sub category name 
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // other code 
        }

Полный код:

        function wpse39130_register_more_stylesheets() {
        wp_register_style( 'stylesheet_name', get_stylesheet_directory_uri() . '/whatsqshop.css' );
    }
    add_action( 'init', 'wpse39130_register_more_stylesheets' );

    function wpse39130_conditionally_enqueue_my_stylesheet() {
        // only enqueue on product-services page slug
    global $post; //GLobal Post variable 
    $postcat = get_the_category( $post->ID ); // Get the Category info from POST ID

    if ( ! empty( $postcat ) ) { // IF POST CATEGORY IS NOT EMPTY
    //    echo esc_html( $postcat[0]->slug );   //Display SLUG On output screen <Debug option>
  //echo esc_html( $postcat[0]->name ); //Display name on screen
     //echo esc_html( $postcat[1]->name ); //Display name on screen

    //echo var_dump($postcat ); // For debug 
    }
    //  if( is_single(88)) {
       if ( $postcat[1]->name == 'Shopping' ) {
            wp_enqueue_style( 'stylesheet_name' );
        }else{
    //wp_enqueue_style( 'stylesheet_name' );
    }

    }
    add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

Пример: * Нет лишних CSS http://whatsq.com/category/gst16/

* Дополнительный CSS с фоном только из вышеуказанной категории http://whatsq.com/information-technology/shopping-information-technology/mothers-day-gift-plan-show-mom-the-love-with-flowers-and- и больше/

Piclaunch S
источник
Я задал вопрос? Это просто мой ответ на текущую тему. Который поподробнее.
Piclaunch S