post_class() — выводит список CSS-классов для поста

Функция post_class() выводит HTML-атрибут class="" с содержащимися в нем классами, которые WordPress присваивает для постов. В итоге для каждого поста получаем уникальный набор классов CSS.

Я уже рассматривал функцию body_class(), которую нужно было добавлять в тег <body>. Функцию же post_class() мы вставляем в тег <div>, в который заключен пост (или его анонс), примерно вот так <div <?php post_class() ?>>.

post_class( $class = '', $post_id = null )
$class
(строка|массив) класс или классы CSS, которые вы хотите добавить к общему списку выводимых классов.
$post_id
(целое число) ID поста (по умолчанию — текущий из цикла).

Список присваиваемых классов

Эту таблицу я составил, проанализировав исходный код функции.

Условие Добавляемые классы
Одинаковые для всех постов post-{ID поста}, type-{тип поста}, status-{статус поста}, hentry, а также классы, указанные в параметре функции $class.
!is_admin() {тип поста}
Если данным типом поста поддерживаются форматы format-{название формата} либо format-standart, если формат данной записи не установлен.
Если пост запаролен post-password-required
Если пост не запаролен, не является вложением и имеет установленную миниатюру has-post-thumbnail
is_sticky()
  • Если выполняются два следующих условия is_home() и !is_paged()sticky,
  • иначе если выполняется is_admin()status-sticky.
Если пост находится в одной или нескольких категориях category-{ярлык категории} (либо category-{ID категории}, если с ярлыком возникли проблемы)
Если посту присвоены метки tag-{ярлык метки} (либо tag-{ID метки})

Примеры использования post_class()

Простой пример использования функции в цикле

Для того, чтобы вывести ID поста, воспользуемся функцией the_ID().

<div id="post-<?php the_ID() /* выводим ID поста */ ?>" <?php post_class() /* выводим классы */ ?>>

Для записи с ID=5855 результат будет следующий:

<div id="post-5855" class="post-5855 post type-post status-publish format-standard hentry category-vse-podryad">

Окей, что можно сказать о нашем посту, глядя на этот HTML код?

  • post type-post — это запись (тип поста post).
  • status-publish — запись опубликована.
  • format-standard — тема поддерживает форматы постов, при этом у рассматриваемого поста формат не присвоен.
  • category-vse-podryad — запись находится в категории с ярлыком «vse-podryad».

Добавление собственных классов CSS

Предположим, что у нашего блока <div> уже есть атрибут class, при этом вы решили, что будете использовать функцию post_class(). Как всё это можно сочетать?

Было:

<div class="myclass1 myclass2"></div>

Стало:

<div <?php post_class( array( 'myclass1', 'myclass2' ) ) ?>></div>

Комментарии 2

  • Алексей11 февраля 2015 в 10:02 #

    а как избавиться от hentry? Поможете посоветовать?

    • Миша11 февраля 2015 в 17:02 #

      Конечно, вот код для functions.php:

      function true_remove_hentry( $classes ) {
      	$classes = array_diff( $classes, array( 'hentry' ) ); // можно удалить любые классы, указав их в массиве
      	return $classes;
      }
       
      add_filter( 'post_class', 'true_remove_hentry' );

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...