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

16 янв. 2012 г., 22:45:19
Просмотры: 22.1K
Голосов: 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() {
    // подключать только на странице с ярлыком product-services
    if ( is_page( 'products-services' ) ) {
        wp_enqueue_style( 'stylesheet_name' );
    }
}
add_action( 'wp_enqueue_scripts', 'wpse39130_conditionally_enqueue_my_stylesheet' );

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

1
Комментарии

На самом деле я тоже скопировал и вставил ваш код, и он работает идеальножирный текст

abhishek abhi Abhi abhishek abhi Abhi
13 февр. 2017 г. 11:04:16
Все ответы на вопрос 3
1

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

16 янв. 2012 г. 22:52:00
Комментарии

Спасибо, это действительно работает! Не знаю, почему раньше не получалось. Видимо, бывают и более странные вещи. Надеюсь, это поможет кому-то еще.

Evan Mattson Evan Mattson
17 янв. 2012 г. 02:19:42
0

У вас всё правильно — просто вы подключаете это к неправильному действию. Попробуйте использовать действие "wp" вместо "init". Когда выполняется init, функция is_page() ещё не будет работать корректно.

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

16 янв. 2012 г. 22:53:39
1

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

    global $post;
    $postcat = get_the_category( $post->ID );
if ( ! empty( $postcat ) ) {
 echo esc_html( $postcat[0]->ID );   // Отладка 
 echo esc_html( $postcat[1]->name ); // Отладка 
 echo var_dump($postcat ); // Отладка 
}

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

echo esc_html( $postcat[0]->name ); //Отображает название на экране

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

echo esc_html( $postcat[1]->name ); //Отображает название на экране

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

//Используйте $postcat[0]->name для названия родительской категории или вашей подкатегории
        if ( $postcat[1]->name == 'Shopping' ) { 

                wp_enqueue_style( 'stylesheet_name' );
            }else{
        // другой код 
        }

Полный код:

        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() {
        // подключаем только для страницы с слагом product-services
    global $post; //Глобальная переменная POST 
    $postcat = get_the_category( $post->ID ); // Получаем информацию о категории из ID записи

    if ( ! empty( $postcat ) ) { // ЕСЛИ КАТЕГОРИЯ ЗАПИСИ НЕ ПУСТАЯ
    //    echo esc_html( $postcat[0]->slug );   //Отображает SLUG на экране <Для отладки>
  //echo esc_html( $postcat[0]->name ); //Отображает название на экране
     //echo esc_html( $postcat[1]->name ); //Отображает название на экране

    //echo var_dump($postcat ); // Для отладки 
    }
    //  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-and-more/

7 мая 2018 г. 09:53:51
Комментарии

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

Piclaunch S Piclaunch S
8 мая 2018 г. 00:06:49