Функция body_class() в WordPress: синтаксис, использование и примеры

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *