WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

post_class() WP 2.7

Выводит селекторы 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

Хуков нет.

Возвращает

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

Использование

<div <?php post_class(); ?>>
$class(строка/массив)
Один или несколько классов, которые нужно добавить к остальным. Классы нужно разделять пробелом.
По умолчанию: нет
$post_id(число)
ID поста, к которому будет относится работа функции.
По умолчанию: текущий пост в цикле ($post->ID)

Примеры

#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); ?>

Список изменений

С версии 2.7.0 Введена.

Код post class: wp-includes/post-template.php WP 5.3

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

Cвязанные функции

Из метки: Оформление (верстка классы стили)

Еще из раздела: Другие функции темы

Еще из тегов шаблона: Записи: посты, страницы, ...

6 комментов
  • Alex

    Тимур, подскажи пожалуйста, чем чревата замена данной функции на обычный див ?

    Ответить04.Окт.2014 в 20:31 #
    • Kama7641

      Функция выводит css классы, по которым что-то может оформляться в шаблоне. Если сами разрабатываете шаблон, то чаще всего ничем. Если удаляете из скаченного шаблона, то частично может пропасть css оформление на разных страницах...

      Ответить05.Окт.2014 в 02:38 #
  • @ Лео

    Данная функция выводит дополнительный класс, если есть миниатюра записи has-post-thumbnail. Можно добавить класс, если нет миниатюры? Что-то вроде no-post-thumbnail, нужно особых стилей задать, когда нет картинки в статье...

    Ответить14.Сен.2019 в 16:00 #
    • campusboy3433 www.youtube.com/c/wpplus

      Да, на хуке post_class можно добавить какие угодно классы. Даже в теле этой статьи есть пример, как этим хуком пользоваться.

      Ответить14.Сен.2019 в 16:26 #
Здравствуйте, !     Войти . Зарегистрироваться