Как подключить таблицу стилей условно только для определенных страниц?
Прежде чем начать, хочу отметить, что существует несколько хороших статей о том, как условно подключать скрипты в зависимости от содержимого страницы/записи.
- Разработка плагинов WordPress - Как подключать CSS и JavaScript условно и только когда они нужны для записей
- Как загружать JavaScript как мастер WordPress
Это отличные материалы, но они намного сложнее того, что мне нужно сделать.
Мне кажется, что решение заключается в использовании встроенной функции 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' );
Когда я убираю условную часть, таблица стилей успешно подключается, так что я знаю, что это работает.

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

Я пытался повторить тот же код и проверить, получу ли я аналогичный результат, и заметил, что функция 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/
