body_class()
Выводит css классы относящиеся к текущей странице. Предназначен для использования в теге <body>.
Эта функция может пригодиться разработчикам тем, чтобы эффективнее использовать CSS селекторы. Она дописывает к тегу body различные классы, в зависимости от того на какой странице находится посетитель, залогинен он или нет и т.д. (например, class="home logged-in"
).
Чтобы добавить дополнительные классы используйте параметр $class или фильтр body_class
(см. примеры):
Смотрите хук body_class
Хуков нет.
Возвращает
null
. Выводит на экран список css классов.
Использование
<body <?php body_class( $class ) ?>>
- $class(строка/массив)
- Список дополнительных классов, которые нужно добавить к базовому списку. При добавлении нескольких классов разделяйте их пробелом.
По умолчанию: ''
Функция может выводить следующий список классов
Аргумент class может содержать сразу несколько значений из этого списка.
rtl — is_rtl() home — is_front_page() blog — is_home() privacy-policy — is_privacy_policy() archive — is_archive() date — is_date() error404 — is_404() // is_search() search — is_search() search-results — есть результаты search-no-results — нет результатов // is_singular() single — is_single() single-(post_type) — is_single() && $post->post_type postid-(post_id) — is_single() && $post->post_type // post-formats single-format-(post_format) — get_post_format() single-format-standard — ! get_post_format() // is_page() page — is_page() page-id-(page_id) — is_page() page-parent — дочерняя страница page-child — $post->post_parent parent-pageid-(id) — $post->post_parent page-template page-template-(название файла шаблона) — is_page_template() // is_attachment() attachment — is_attachment() attachmentid-(id) — is_attachment() attachment-(mime-тип) — is_attachment() // is_post_type_archive() post-type-archive — is_post_type_archive() post-type-archive-(post_type) — is_post_type_archive() // is_author() author — is_author() author-(user_nicename) — is_author() // terms: is_category(), is_tag(), is_tax() category category-(slug) category-(id) tag tag-(slug) tag-(id) tax-(taxonomy) term-(term slug) term-(id) // is_paged() paged — is_paged() paged-(page number) single-paged-(page number) page-paged-(page number) category-paged-(page number) tag-paged-(page number) date-paged-(page number) author-paged-(page number) search-paged-(page number) // Other logged-in — is_user_logged_in() admin-bar — is_admin_bar_showing() no-customize-support — is_admin_bar_showing() custom-background — current_theme_supports( 'custom-background' ) wp-custom-logo — has_custom_logo() wp-embed-responsive — current_theme_supports( 'responsive-embeds' )
Где, какие классы выводятся
Для вывода классов используются условные теги. Ниже зависимость добавляемого в список класса, от срабатывания условного тега:
is_front_page() — home
is_home() — blog
is_attachment() — attachment
is_404() —error404
is_user_logged_in() — logged-in
is_admin_bar_showing() — admin-bar
no-customize-support
is_search() — search
- Есть найдено:
search-results
. - Если не найдено:
search-no-results
.
is_single() — single
postid-(ID поста)
- Если пост:
single-post
- Если произвольный типа поста:
single-(тип поста)
- Если поддерживаются форматы постов:
single-format-{формат}
илиsingle-format-standard
- Если вложение (прикрепленные файлы):
attachment
single-attachment
attachmentid-{ID}
attachment-mime-type
is_page() — page
page-id-{ID страницы}
- Родительская страница:
page-parent
- Дочерняя страница:
page-child
parent-pageid-{ID}
- Шаблон страницы:
- Шаблон указан:
page-template
page-template-{имя файла}-php
- Шаблон не указан:
page-template-default
- Шаблон указан:
is_archive() —archive
- По дате:
date
- Тип поста:
post-type-archive
post-type-archive-{тип поста}
- Автор:
author
author-{имя}
- Рубрики:
category
category-{ярлык}
- Метки:
tag
tag-{ярлык}
- Таксономия:
tax-{таксономия}
term-{ярлык термина}
term-{ID}
- Архив формата постов:
tax-post_format
term-post-format-{формат}
term-{ID}
is_paged() — paged
paged-{номер страницы}
- Пост:
single-paged-{номер страницы}
- Страница:
page-paged-{номер страницы}
- Рубрика:
category-paged-{номер страницы}
- Метка:
tag-paged-{номер страницы}
- Архив по дате:
date-paged-{номер страницы}
- Архив автора:
author-paged-{номер страницы}
- Поиск:
search-paged-{номер страницы}
- Произвольный тип записи:
post-type-paged-{номер страницы}
Если есть настраиваемый фон
custom-background
Делается такая проверка:if ( get_theme_mod( 'background_color' ) || get_background_image() )
is_rtl() — rtl
Примеры
#1 Применение
Пример, показывающий как применяется функция:
<body <?php body_class(); ?>>
В результате, в HTML коде мы получим следующее:
<body class="page page-id-2 page-template page-template-default logged-in">
А в сss описываться это будет так:
.page { /* стили для постоянной страницы */ } .page-id-2 { /* стили для постоянной страницы с ID=2 */ } .logged-in { /* стили для всех страниц, когда пользователь авторизован */ }
#2 Добавим свой, произвольный класс:
<body <?php body_class('class-name'); ?>>
Получим:
<body class="class-name post post-id-24">
#3 Добавка классов через фильтр body_class
Классы можно добавить с применением условий.
Добавим класс только для постоянных страниц - is_page(). Для этого воспользуемся фильтром body_class. Код можно вставить в файл темы function.php:
add_filter( 'body_class','my_class_names' ); function my_class_names( $classes ) { // добавим класс 'class-name' в массив классов $classes if( is_page() ) $classes[] = 'it_is_page'; return $classes; }
Это только демонстрация: для постоянных страниц уже есть уникальный класс.
#4 Добавим ярлык категории записи в классы {#post-cat-class}
Добавим слаг категории как класс для страниц постов. Слаг категории будет тот, к которому относится пост:
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 Добавим имя родительской страницы в классы body
Этот пример добавляет ярлык родительской страницы в классы body, когда мы находимся на дочерней странице:
add_filter( 'body_class', 'add_page_parent_to_body_class' ); function add_page_parent_to_body_class( $classes ){ global $post; if( is_page() && $post->post_parent ){ $post_data = get_post( $post->post_parent ); $classes[] = 'parent_page-' . $post_data->post_name; } return $classes; }
Это только демонстрация: для родительских страниц уже есть уникальный класс.
#6 Добавим класс только, когда показывается сайдбар
В примере 3 было показано, как добавлять дополнительные CSS классы через фильтр body_class. Ниже пример демонстрирует как добавить новый класс только когда показывается сайдбар:
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(); } # Добавляем классы к body function sidebars_body_classes__ob_end(){ $html = ob_get_clean(); if( $classes = sidebars_body_classes() ){ echo str_replace( '<body class="', "<body class=\"$classes ", $html ); } echo $html; }
Список изменений
С версии 2.8.0 | Введена. |
Код body_class() body class WP 6.8
function body_class( $css_class = '' ) { // Separates class names with a single space, collates class names for body element. echo 'class="' . esc_attr( implode( ' ', get_body_class( $css_class ) ) ) . '"'; }