Функция body_class() в WordPress
Функция body_class() отображает имена классов, которые описывают текущую страницу. Эти классы добавляются к элементу <body> и полезны для разработчиков тем, так как позволяют более эффективно использовать CSS-селекторы.
Зачем использовать body_class()?
Эта функция добавляет различные классы к тэгу <body>, в зависимости от того, на какой странице находится пользователь, вошёл ли он в систему и т.д. Например, на главной странице пользователь может увидеть класс class="home logged-in".
Чтобы добавить дополнительные классы, вы можете использовать параметр $class или фильтр body_class.
Синтаксис
body_class( $css_class );
Где $css_class — это строка или массив строк, содержащих имена классов, которые нужно добавить к классу страницы. По умолчанию он пустой.
Список классов, которые могут быть отображены
Ниже приведен список классов, которые могут быть автоматически добавлены:
rtl— если пользовательский интерфейс справа налево.home— если это главная страница.blog— если это блог.privacy-policy— если это страница политики конфиденциальности.archive— если это архивная страница.error404— если страница не найдена.
Примеры классов:
// Страница поиска
search — is_search()
search-results — если есть результаты
search-no-results — если результатов нет
// Одинарная запись
single — is_single()
single-(post_type) — если это одна запись определённого типа
postid-(post_id) — если это одна запись с определённым ID
Когда отображаются определённые классы?
Для вывода классов используются условные теги. Вы можете увидеть какие условные теги используются для каких классов:
is_front_page()— добавляет классhome.is_home()— добавляет классblog.is_attachment()— добавляет классattachment.is_404()— добавляет классerror404.
Примеры использования
1. Основное использование
Вот как обычно используется эта функция:
>
Результат будет следующим:
А ваши стили CSS могут быть примерно такими:
.page {
/* стили для страницы */
}
.page-id-2 {
/* стили для страницы с ID=2 */
}
.logged-in {
/* стили для всех страниц, где пользователь вошёл в систему */
}
2. Добавление собственного класса
Чтобы добавить свой класс, вы можете сделать следующее:
>
Результат:
3. Добавление класса с помощью фильтра body_class
Если вы хотите добавить класс только для одиночных страниц, вы можете использовать фильтр body_class:
add_filter( 'body_class', 'my_class_names' );
function my_class_names( $classes ) {
// добавляем класс 'it_is_page', если это страница
if ( is_page() ) {
$classes[] = 'it_is_page';
}
return $classes;
}
4. Добавление имени категории текущего поста к классам
add_filter( 'post_class', 'category_id_class' );
add_filter( 'body_class', 'category_id_class' );
function category_id_class( $classes ) {
if ( is_single() ) {
global $post;
foreach ( get_the_category($post->ID) as $category ) {
$classes[] = $category->name;
}
}
return $classes;
}
5. Добавление класса только для страниц с сайдбаром
Этот пример показывает, как добавить класс, если отображается сайдбар:
add_action( 'get_sidebar', 'sidebars_body_classes' );
add_action( 'wp_head', 'sidebars_body_classes__ob_start' );
add_action( 'wp_footer', 'sidebars_body_classes__ob_end' );
function sidebars_body_classes( $name = '' ){
static $classes = 'withsidebar';
if ( $name ) {
$classes .= " sidebar-$name";
}
return $classes;
}
function sidebars_body_classes__ob_start(){
ob_start();
}
function sidebars_body_classes__ob_end(){
$html = ob_get_clean();
if ( $classes = sidebars_body_classes() ) {
echo str_replace( '
Заключение
Функция body_class() позволяет удобно и быстро управлять классами, добавляемыми к элементу <body>. Это облегчает стилизацию страниц и улучшает SEO вашего сайта. Используя условные те��и и фильтры, можно создавать гибкие темы, которые будут адаптироваться к различным ситуациям.