WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

post_class()WP 2.7.0

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

Хуков нет.

Возвращает

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

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

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

Примеры

1

#1 Использование за пределами цикла

Если нужно получить классы нужного нам поста для текущей страницы, а не поста который определился как текущий, то функции можно передать второй параметр содержащий ID нужного нам поста:

<?php post_class('',$post_id); ?>
0

#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 */
}
0

#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">
0

#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() WP 6.5.2

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 ) ) ) . '"';
}
6 комментариев
    Войти