Описание
Выводит селекторы CSS (классы) всячески характеризующее пост/запись. Используется для упрощения верстки шаблона.
post_class() - тег шаблона, который призван упростить работу разработчиков тем для 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>, т.е. для всей страницы.
Для вывода нужных селекторов функция совершает, порой, не мало PHP операций, потому если вы сильно обеспокоены производительностью шаблона, то надо серьезно задуматься об её использовании.
post_class() работает на базе get_post_class().
Функция возвращает текст, сформированный атрибут class для html тега.
Использование
<?php post_class($class, $post_id); ?>
Параметры
- $class (строка/массив)
- Один или несколько классов, которые нужно добавить к остальным. Классы нужно разделять пробелом.
По умолчанию: нет - $post_id (число)
- ID поста, к которому будет относится работа функции.
По умолчанию: текущий пост в цикле ($post->ID)
Все CSS классы
post_class() может вывести один или несколько из нижеприведенных классов, в зависимости от того, какую страницу просматривает посетитель.
- .post-id
- .post
- .attachment
- .sticky
- .hentry
- .category-ID
- .category-name
- .tag-name
- .format-name
Где и какие классы выводятся
- Главная страница
- Если запись будет выводится на главной странице (неважно какой тип записи выводится, постоянная страница или пост) HTML контейнер для которого применяется данная функция получит CSS классы: post post-id hentry
- Пост/запись
- На отдельной странице поста (single.php) мы увидим классы: post post-id hentry
- Прилепленный пост
- Если пост помечен как "прилепленный" (sticky), то будет добавлен класс: sticky
- Архив / Поиск / Автор
- На страницах архивов (дата, поиск, авторы и т.п.) будут выведены классы: post post-id
- Категория
- Посты выводимые на странице категорий, получат CSS классы: post post-id category-ID category-name
- Метка
- На старицах меток функция выведет для каждого выводимого поста селекторы: tag-name post post-id
- Вложение
- Для прикрепленных записей типа "attachment" (картинки, медиа, файлы и.п.): attachment post post-id
- Форматы
- Если пост принадлежит к какому либо формату (форматы введены в версии 3.1), то к остальным классам будет добавлен: format-name
Примеры
1. Базовый пример.
Применим функцию к 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 */
2. Добавка новых классов.
Функция занимает атрибут 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">
3. Добавка классов через фильтр.
Чтобы добавить название всех категорий к которым относится пост, как классы, можно использовать такой хак:
// добавка названий категорий в виде классов в функции 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');
4. Использование за пределами цикла.
Если нужно получить классы нужного нам поста для текущей страницы, а не поста который определился как текущий, то функции можно передать второй параметр содержащий ID нужного нам поста:
<?php post_class('',$post_id); ?>
На заметку
- С версии 3.1 введена поддержка форматов постов.
- Использует: get_post_class()
post_class()
из файла: /wp-includes/post-template.php WP 3.3.2function post_class( $class = '', $post_id = null ) {
// Separates classes with a single space, collates classes for post DIV
echo 'class="' . join( ' ', get_post_class( $class, $post_id ) ) . '"';
}Связанные Функции
Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
