Как добавить дополнительный класс хедеру на определенных страницах?
Всем привет!
Ситуация следующая.
Есть хедер в файле header.php
Вызываю его <?php get_header(); ?>
Но на некоторых страницах мне нужно получить этот же хедер с изменением цвета в стилях, которые определяет дополнительный класс
Как вариант создать файл header-black.php
куда поместить код хедера
И на нужных страницах вызывать его с помощью <?php get_header('black'); ?>
Возможно есть какой-то более правильный способ добавить класс хедеру на определенных страницах?
Чтобы не создавать дополнительный header-black.php ради дополнительного класса, который определяет одну строчку CSS кода.
Дополнительно:
Ответы:
<?php $class = ''; if ( 'определенная страница' == true ) { $class = ' header_black'; } ?> <div class="header<?= $class ?>"> <!-- содержимое --> </div> <style> .header_black { background: #000; } </style> |
<?php $class = ''; if ( 'определенная страница' == true ) { $class = ' header_black'; } ?> <div class="header<?= $class ?>"> <!-- содержимое --> </div> <style> .header_black { background: #000; } </style>
Посмотрите как работают функции WordPress body_class() и post_class(). По аналогии вы можете создать свою функцию header_class() с нужными вам условиями, пример:
if ( ! function_exists( 'get_header_class' ) ) { /** * Get classes for header container. * * @param string $class Additional header classes. * * @return array */ function get_header_class( $class = '' ) { // Add elements to array. $classes = array(); $classes[] = 'header'; if ( has_custom_header() ) { $classes[] = 'header_background-image'; } if ( is_admin_bar_showing() ) { $classes[] = 'is_wpadminbar'; } if ( is_category( 'example' ) ) { $classes[] = 'header_example'; } // Check the function has accepted any classes. if ( isset( $class ) && ! empty( $class ) ) { if ( is_array( $class ) ) { $classes = array_merge( $classes, $class ); } elseif ( is_string( $class ) ) { $classes = array_merge( $classes, explode( ' ', $class ) ); } } $classes = apply_filters( 'get_header_class', $classes ); $classes = array_unique( (array) $classes ); return $classes; } } if ( ! function_exists( 'header_class' ) ) { /** * Display classes for header container. * * @param string $class Additional header classes. * @param bool $echo Echo or return header classes. * * @return string|void */ function header_class( $class = '', $echo = true ) { $classes = get_header_class( $class ); if ( $echo ) { echo 'class="' . esc_attr( implode( ' ', $classes ) ) . '"'; } else { return 'class="' . esc_attr( implode( ' ', $classes ) ) . '"'; } } } |
if ( ! function_exists( 'get_header_class' ) ) { /** * Get classes for header container. * * @param string $class Additional header classes. * * @return array */ function get_header_class( $class = '' ) { // Add elements to array. $classes = array(); $classes[] = 'header'; if ( has_custom_header() ) { $classes[] = 'header_background-image'; } if ( is_admin_bar_showing() ) { $classes[] = 'is_wpadminbar'; } if ( is_category( 'example' ) ) { $classes[] = 'header_example'; } // Check the function has accepted any classes. if ( isset( $class ) && ! empty( $class ) ) { if ( is_array( $class ) ) { $classes = array_merge( $classes, $class ); } elseif ( is_string( $class ) ) { $classes = array_merge( $classes, explode( ' ', $class ) ); } } $classes = apply_filters( 'get_header_class', $classes ); $classes = array_unique( (array) $classes ); return $classes; } } if ( ! function_exists( 'header_class' ) ) { /** * Display classes for header container. * * @param string $class Additional header classes. * @param bool $echo Echo or return header classes. * * @return string|void */ function header_class( $class = '', $echo = true ) { $classes = get_header_class( $class ); if ( $echo ) { echo 'class="' . esc_attr( implode( ' ', $classes ) ) . '"'; } else { return 'class="' . esc_attr( implode( ' ', $classes ) ) . '"'; } } }
Использование:
<header id="header" <?php header_class(); ?> aria-label="<?php _ex( 'Site header', 'aria-label', 'themename' ); ?>"> <!-- ... --> </header> |
<header id="header" <?php header_class(); ?> aria-label="<?php _ex( 'Site header', 'aria-label', 'themename' ); ?>"> <!-- ... --> </header>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Дополнительный класс хедеру на определённых страницах лучше добавлять через условные теги WordPress в шаблоне header или через фильтр, если тема поддерживает массив классов. Не нужно дублировать весь
header.phpради одного класса.Если в шаблоне есть тег хедера, можно сделать так:
$header_classes = ['site-header']; if (is_front_page()) { $header_classes[] = 'site-header--home'; } if (is_page(['contacts', 'about'])) { $header_classes[] = 'site-header--inner'; } if (is_singular('product')) { $header_classes[] = 'site-header--product'; } ?> <header class="<?php echo esc_attr(implode(' ', $header_classes)); ?>">
Если нужно по ID страницы:
if (is_page(123)) { $header_classes[] = 'site-header--landing'; }
Если тема уже использует
body_class(), иногда достаточно добавить класс кbodyи писать CSS от него:.page-id-123 .site-header { background: transparent; }
Это самый безопасный вариант, если не хочется трогать header. WordPress сам добавляет классы вроде
home,page-id-123,single-product,tax-product_cat. Отдельный класс на header нужен только если стили или JS завязаны именно на этот элемент.Для одной строчки CSS отдельный
header-black.phpдействительно не нужен. Самый нормальный вариант — добавить класс на<body>или на wrapper хедера по условию. В WordPress уже есть фильтрbody_class, и он как раз предназначен для таких случаев.add_filter('body_class', function ($classes) { if (is_page(['contacts', 'about']) || is_singular('service')) { $classes[] = 'header-dark'; } return $classes; });
После этого в CSS можно менять хедер только на нужных страницах:
.header-dark .site-header { background: #111827; color: #fff; }
Если класс нужен именно на элементе хедера, а не на
body, задайте переменную перед разметкой:$header_class = is_page('contacts') ? ' site-header--dark' : ''; echo '<header class="site-header' . esc_attr($header_class) . '">';
Так вы сохраните один шаблон хедера и не будете дублировать меню, логотипы, скрипты и микроразметку. Отдельный
get_header('black')имеет смысл только если структура хедера реально другая, а не просто цвет.