post_class

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

Код из


wp-includes/post-template.php

WP 4.7.2

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

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


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

Your email address will not be published. Required fields are marked *