post_class() WP 2.7.0

Виводить селектори CSS (класи), що всіляко характеризує пост/запис. Використовується для спрощення верстки шаблону.

Це тег шаблону, який полегшує роботу розробників тем для WordPress. Функція використовується всередині HTML тега і забезпечує його CSS класами, що описують пост, на якому в даний момент знаходиться відвідувач. Наприклад,
class="post post-4564 category-48"

post_class() прийнято використовувати в таких файлах шаблону index.php, як single.phpі т.п. для контейнерів, що виводять інформацію про пост ( <div id="post">або <div id="post-123">). Для сторінок, де використовується Циклічний висновок , функцію потрібно використовувати всередині циклу.

Якщо необхідно отримати результат функції, а не виводити його на екран, використовуйте get_post_class() . Тільки у цьому випадку ви отримаєте масив класів. а не рядок!

Існує дуже схожа функція body_class() , яка також виводить css класи, але тега <body> , тобто. для всієї сторінки.

Де та які класи додаються
  • hentry, post-{$post_id}, type-{$post_type}, status-{$post_status}, {$post_type}— виводяться всім записів. Частини у дужках замінюються на відповідну змінну поточного запису;
    {$post_type} НЕ виводиться в адмінці…

  • sticky– якщо це приліплений піст, виводиться лише на сторінці is_home() . В адмінці виводиться status-sticky;

  • has-post-thumbnail— якщо запис має мініатюру;

  • format-{формат записи}— якщо активовано підтримку форматів. Якщо формат не вказано, то виведе format-standart.

  • post-password-required– Для записів захищених паролем.

  • {$taxonomy}-{$slug}– Якщо запис належить таксономії. $taxonomy заміниться назвою такси, а $slug назвою терміна (елемента таксономії). Наприклад: category-blog;
    Винятком тут є таксономія post_tagдля неї префікс буде tag-, а не post_tag-. Наприклад: tag-novosti.
Працює на основі:
get_post_class()
1 раз – 0.004188 сек
(дуже повільно) | 50000 разів – 10.89 сек
(повільно) |
PHP 7.0.2, WP 4.4.1

Хуків немає.

Повертає

null. Текст сформований атрибут class для html тега.

Використання

<div <?php post_class(); ?>>
$class
(рядок/масив)
Один або кілька класів, які потрібно додати до решти. Класи потрібно розділяти пробілом.


За замовчуванням: ”
$post_id
(число)
ID посту, до якого буде належати робота функції.


За промовчанням: поточний пост у циклі ($post->ID)

Приклади

1

#1 Використання за межами циклу

Якщо потрібно отримати класи потрібного нам посту для поточної сторінки, а не посту, який визначився як поточний, то функції можна передати другий параметр, який містить ID потрібного нам посту:

<?php post_class('',$post_id); ?>
0

#2 Базовий приклад

Застосуємо функцію до HTML контейнера, що містить дані посту:

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

В результаті ми отримай щось подібне (нехай пост знаходиться у категорії Танці (dancing)):

<div id="post-4564" class="post post-4564 category-48 category-dancing logged-in">

Для цього прикладу в CSS потрібно використовувати наступні селектори:

.post {
		/* стилі для всіх постів */
}
.post-4564 {
		/* стилі тільки для посту в ID 4564 */
}
.category-dancing {
		/* стилі для всіх постів із категорії dancing */
}
0

#3 Додавання нових класів

Функція займає атрибут HTML тега “class”, тому якщо нам потрібно додати свій клас до тега, додавати його потрібно через функції просто прописавши його в параметр функції:

<div id="post-<?php the_ID(); ?>" <?php post_class('class-name'); ?>>

В результаті ми отримаємо

<div id="post-4564" class="class-name post-4564 category-48 category-dancing logged-in">
0

#4 Додавання класів через фільтр

Щоб додати назву всіх категорій до яких належить пост, як класи, можна використовувати такий:

// Добавка назв категорій у вигляді класів у функції body class і post class
	function category_id_class($classes) {
		global $post;
		foreach((get_the_category($post->ID)) as $category)
			$classes[] = $category->category_nicename;
			return $classes;
	}
	add_filter('post_class', 'category_id_class');
	add_filter('body_class', 'category_id_class');

список змін

З версії 2.7.0Введено.

Код post_class() WP 6.0.2

function post_class( $class = '', $post_id = null ) {
	// Separates classes with a single space, collates classes for post DIV.
	echo 'class="' . esc_attr( implode( ' ', get_post_class( $class, $post_id ) ) ) . '"';
}

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

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