body_class()
Виводить css класи, що стосуються поточної сторінки. Призначений для використання у тезі <body> .
Ця функція може стати в нагоді розробникам CSS селектори . Вона дописує до тега body різні класи, залежно від того, на якій сторінці знаходиться відвідувач, залогінений він чи ні і т.д. (Наприклад, class="home logged-in"
).
Щоб додати додаткові класи, використовуйте параметр $class або фільтр body_class
(див. приклади):
Дивіться хук body_class
get_body_class()
(швидко) | 50000 разів – 3.11 сек
(швидко) |
PHP 7.0.14, WP 4.7
Хуків немає.
Повертає
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) // Інші 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-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.0.2
function body_class( $class = '' ) { // Separates class names with single space, collates class names for body element. echo 'class="' . esc_attr( implode( ' ', get_body_class( $class ) ) ) . '"'; }