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 - Якщо вкладення (прикріплені файли):
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-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 ) ) ) . '"';
}