Как добавить пользовательские CSS-классы к тегу в WordPress

Вопрос или проблема

Я работаю над кастомизацией своей темы WordPress и хочу добавить определённые классы к тегу <body> в зависимости от типа страницы или пользовательских условий. Как я могу изменить тег <body>, чтобы включить пользовательские классы с помощью функции WordPress? Мне нужно редактировать файл functions.php или существует встроенный фильтр для этого?

Для этой цели используйте body_class, который позволяет изменять (добавлять или удалять) CSS классы для тега body.

С помощью функции is_singular() вы можете проверить текущий тип поста. Если вы хотите протестировать что-то другое, здесь вы найдёте несколько полезных функций, называемых условными тегами.

Код следует поместить в файл functions.php.
Если вы модифицируете тему, созданную кем-то другим, лучше создать дочернюю тему. Это позволит вам обновлять тему в дальнейшем, не теряя ваших модификаций.

add_filter( 'body_class', 'body_custom_css', 10, 2 );

function custom_body_class( $classes, $css_class )
{
   // Добавить класс, если post_type - "foo" ИЛИ "bar"
   if ( is_singular( array( 'foo', 'bar' ) ) ) {
      $classes[] = 'foobar-class';
   }
   return $classes;
}

Поскольку у меня недостаточно “репутации”, чтобы комментировать приведённый выше код в этом стеке, следует отметить всем, кто последует, что код выше (is_singular от nmr) не будет работать по нескольким причинам. Мне нравится, как Уmesh представил add_filter, так как параметр $css_class не нужен для этой цели.

Вот рабочая модель кода:

add_filter( 'body_class', 'custom_body_class', 10, 2 );

function custom_body_class( $classes, $css_class ){
   // Добавить класс, если post_type - "post" ИЛИ "page"
   if ( is_singular( array( 'post', 'page' ) ) ) {
      $classes[] = 'page-post-class-name-to-add';
   }
   return $classes;
}

Вышеупомянутые исправления также меняют foo и bar на что-то более прямо относящееся к применению классов и типов постов в методе.

Вы также можете разбить проверку на несколько if операторов следующим образом (этот код также меняет расположение add_filter и удаляет лишние параметры, которые не нужны):

function custom_body_class( $classes ){
   // Добавить класс, если post_type - "post"
   if ( is_singular( array( 'post' ) ) ) {
      $classes[] = 'post-class-name-to-add';
   }
   // Добавить класс, если post_type - "page"
   if ( is_singular( array( 'page' ) ) ) {
      $classes[] = 'page-class-name-to-add';
   }
   // Добавить класс, если post_type - пользовательский тип "news"
   if ( is_singular( array( 'news' ) ) ) {
      $classes[] = 'news-class-name-to-add';
   }
   return $classes;
}

add_filter( 'body_class', 'custom_body_class' );

Стоит также отметить, что как is_singular(), так и is_page() будут возвращать true, если вы используете статическую страницу в качестве главной (настройки чтения). В этом случае вам, вероятно, следует использовать is_front_page(), чтобы определить, добавлять ли пользовательский класс только к главной странице.

Пожалуйста, найдите ниже детали для добавления пользовательских классов к тегу <body>:

is_page('about') - Страница "О нас"
is_singular('custom_post_type') - Одиночная страница - пользовательский тип поста
is_user_logged_in() - пользователь вошел в систему
is_front_page() - На этой странице отображается главная

То же самое с использованием других страниц

function add_custom_body_classes($classes) {
    // Добавить класс на конкретной странице
    if (is_page('about')) {
        $classes[] = 'about-page';
    }

    // Добавить класс для пользовательского типа поста
    if (is_singular('custom_post_type')) {
        $classes[] = 'custom-post-type-class';
    }

    if (is_user_logged_in()) {
        $classes[] = 'logged-in-user';
    }

    if (is_front_page()) {
        $classes[] = 'home-page-class';
    }

    return $classes;
}

add_filter('body_class', 'add_custom_body_classes');

Мы отредактировали functions.php. Мне нужно добавить пользовательский код в файл functions.php вашей темы и использовать фильтр body_class:

body_class – это то, что вам нужно. Вы можете использовать его для простого добавления классов к тегу <body>.

function my_theme_body_classes() {

    if (is_single()) {
        $classes[] = 'single-class';
    }

     if (get_post_type() === 'book') {
        $classes[] = 'book-class';
    }

    return $classes;
}

add_filter('body_class', 'my_theme_body_classes');

Просто используйте точные условия для добавления классов к тегу <body>.

Ответ или решение

Чтобы добавить пользовательские CSS-классы к тегу <body> в WordPress, вы можете воспользоваться хуком body_class, который позволяет изменять (добавлять или удалять) CSS-классы для тега <body>. Это делается путем добавления функции в файл functions.php вашей темы. Можно использовать условные теги, такие как is_singular() или is_page(), для проверки типа страницы и добавления соответствующих классов.

Вот пример кода, который вы можете добавить в файл functions.php вашей темы (рекомендуется использовать дочернюю тему для внесения изменений, чтобы сохранить их при обновлении основной темы):

function add_custom_body_classes($classes) {
    // Добавить класс на конкретной странице
    if (is_page('about')) {
        $classes[] = 'about-page'; // Класс для страницы "О нас"
    }

    // Добавить класс для определенного типа записи
    if (is_singular('custom_post_type')) {
        $classes[] = 'custom-post-type-class'; // Класс для пользовательского типа записи
    }

    // Добавить класс, если пользователь вошел в систему
    if (is_user_logged_in()) {
        $classes[] = 'logged-in-user'; // Класс для вошедшего пользователя
    }

    // Добавить класс для главной страницы
    if (is_front_page()) {
        $classes[] = 'home-page-class'; // Класс для домашней страницы
    }

    return $classes; // Вернуть обновленный массив классов
}

add_filter('body_class', 'add_custom_body_classes'); // Применить фильтр

Пояснение кода:

  1. Функция add_custom_body_classes($classes): Эта функция принимает массив классов и добавляет в него новые, в зависимости от условий.

  2. Условные конструкции: Если вы хотите добавить класс на конкретной странице, используйте is_page('about'). Для определения конкретного типа записи — is_singular('custom_post_type'). Вы также можете проверить, вошел ли пользователь в систему с помощью is_user_logged_in() и определить, отображается ли главная страница, используя is_front_page().

  3. Возврат массива классов: Важно не забыть вернуть обновленный массив классов в конце функции.

  4. Хук add_filter: Здесь мы подключаем нашу функцию к хуку body_class. Это позволяет WordPress применять к вашему <body> все классы, которые мы добавили.

Таким образом, с помощью этой процедуры вы сможете добавлять собственные классы к тегу <body>, что позволит вам лучше настраивать стили вашего сайта в зависимости от различных условий.

Оцените материал
Добавить комментарий

Капча загружается...