body_class() WP 2.8.0

Виводить css класи, що стосуються поточної сторінки. Призначений для використання у тезі <body> .

Ця функція може стати в нагоді розробникам CSS селектори . Вона дописує до тега body різні класи, залежно від того, на якій сторінці знаходиться відвідувач, залогінений він чи ні і т.д. (Наприклад, class="home logged-in").

Щоб додати додаткові класи, використовуйте параметр $class або фільтр body_class(див. приклади):

Дивіться хук body_class

Працює на основі:
get_body_class()
1 раз – 0.000176 сек
(швидко) | 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


Приклади

0

#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 {
	/* стилі для всіх сторінок, коли користувач авторизований */
}
0

#2 Додамо свій, довільний клас:

<body <?php body_class('class-name'); ?>>

Отримаємо:

<body class="class-name post-id-24">
0

#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;
}

Це лише демонстрація: для постійних сторінок уже є унікальний клас.

0

#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;
}
0

#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;
}

Це лише демонстрація: для батьківських сторінок уже є унікальний клас.

0

#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() 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 ) ) ) . '"';
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *