post_class()
Выводит CSS-классы всячески характеризующее пост/запись. Используется для упрощения верстки шаблона.
Это тег шаблона, который призван упростить работу разработчиков тем для WordPress. Функция используется внутри HTML тега и снабжает его CSS классами описывающими пост, на котором в данный момент находится посетитель. Например,
class="post post-4564 category-48"
Функцию принято использовать для контейнеров выводящих информацию о посте (<div id="post"> или <div id="post-123">), в таких файлах шаблона как tags.php, single.php.
Для страниц где используется Циклический вывод, функцию нужно использовать внутри цикла.
Используйте 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.
Хуков нет.
Возвращает
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 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.9.4
function post_class( $css_class = '', $post = null ) {
// Separates classes with a single space, collates classes for post DIV.
echo 'class="' . esc_attr( implode( ' ', get_post_class( $css_class, $post ) ) ) . '"';
}