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