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 - Если вложение (прикрепленные файлы):
attachmentsingle-attachmentattachmentid-{ID}attachment-mime-type
is_page() — page page-id-{ID страницы}
- Родительская страница:
page-parent - Дочерняя страница:
page-childparent-pageid-{ID} - Шаблон страницы:
- Шаблон указан:
page-templatepage-template-{имя файла}-php - Шаблон не указан:
page-template-default
- Шаблон указан:
is_archive() —archive
- По дате:
date - Тип поста:
post-type-archivepost-type-archive-{тип поста} - Автор:
authorauthor-{имя} - Рубрики:
categorycategory-{ярлык} - Метки:
tagtag-{ярлык} - Таксономия:
tax-{таксономия}term-{ярлык термина}term-{ID} - Архив формата постов:
tax-post_formatterm-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 Добавим ярлык категории записи в классы {#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;
} #4 Добавим имя родительской страницы в классы 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;
}
Это только демонстрация: для родительских страниц уже есть уникальный класс.
#5 Добавим класс только, когда показывается сайдбар
В примере 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;
} #6 Добавка классов через фильтр 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;
}
Это только демонстрация: для постоянных страниц уже есть уникальный класс.
Список изменений
| С версии 2.8.0 | Введена. |
Код body_class() body class WP 6.9.1
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 ) ) ) . '"';
}