post_class()
Виводить селектори 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()
(дуже повільно) | 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 Використання за межами циклу
Якщо потрібно отримати класи потрібного нам посту для поточної сторінки, а не посту, який визначився як поточний, то функції можна передати другий параметр, який містить ID потрібного нам посту:
<?php post_class('',$post_id); ?>
#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 */ }
#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">
#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() 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 ) ) ) . '"'; }