get_post_class() WP 2.7.0
Получает css классы в виде массива, которые нужно использовать в записи для вывода в html теге .
Итоговый массив классов пропускается через фильтр post_class
, используйте его, когда нужно изменить выводимые классы в зависимости от разных условий.
Чтобы сразу вывести классы на экран в виде строки, используйте post_class()
Где и какие классы добавляются
-
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.00616 сек (очень медленно) | 50000 раз — 10.72 сек (медленно) | PHP 7.0.2, WP 4.4.1
Возвращает
Массив в котором элементы это название классов.
Использование
get_post_class( $class, $post_id );
- $class(строка/массив)
- Классы, которые нужно добавить в список.
По умолчанию: ''
- $post_id(число/WP_Post)
- ID или объект записи, классы которой нужно получить.
По умолчанию: null
Примеры
#1 Демонстрация вывода
$classes = get_post_class();
print_r( $classes );
/*
Array
(
[0] => post-219
[1] => post
[2] => type-post
[3] => status-publish
[4] => format-standard
[5] => has-post-thumbnail
[6] => hentry
[7] => category-blog
[8] => tag-novosti
)
*/
#2 Выведем все классы в виде строки
Этот код можно использовать как замену для post_class():
echo '<div class="' . join(' ', get_post_class() ) . '">';
#3 Добавим свой класс
$classes = get_post_class('foo bar');
// или можно массивом
$classes = get_post_class( array('foo', 'bar') );
/*
Оба примера добавят в общий массив
Array
(
[0] => foo
[1] => bar
[2] => post-19
)
*/
#4 Удалим ненужный класс
Допустим нам нужно избавиться от класса hentry
, тогда перед вызовом get_post_class() или post_class() используйте такой фильтр:
add_filter( 'post_class', 'remove_hentry' );
function remove_hentry( $classes ) {
$unset = array('hentry'); // можно добавить еще
return array_diff( $classes, $unset );
}
Заметки
- С версии 3.1 введена поддержка форматов постов.
- С версии 4.2 введена поддержка таксономий.
Список изменений
С версии 2.7.0 |
Введена. |
С версии 4.2.0 |
Custom taxonomy class names were added. |
Код get_post_class() get post class
WP 5.6.2
<?php
function get_post_class( $class = '', $post_id = null ) {
$post = get_post( $post_id );
$classes = array();
if ( $class ) {
if ( ! is_array( $class ) ) {
$class = preg_split( '#\s+#', $class );
}
$classes = array_map( 'esc_attr', $class );
} else {
// Ensure that we always coerce class to being an array.
$class = array();
}
if ( ! $post ) {
return $classes;
}
$classes[] = 'post-' . $post->ID;
if ( ! is_admin() ) {
$classes[] = $post->post_type;
}
$classes[] = 'type-' . $post->post_type;
$classes[] = 'status-' . $post->post_status;
// Post Format.
if ( post_type_supports( $post->post_type, 'post-formats' ) ) {
$post_format = get_post_format( $post->ID );
if ( $post_format && ! is_wp_error( $post_format ) ) {
$classes[] = 'format-' . sanitize_html_class( $post_format );
} else {
$classes[] = 'format-standard';
}
}
$post_password_required = post_password_required( $post->ID );
// Post requires password.
if ( $post_password_required ) {
$classes[] = 'post-password-required';
} elseif ( ! empty( $post->post_password ) ) {
$classes[] = 'post-password-protected';
}
// Post thumbnails.
if ( current_theme_supports( 'post-thumbnails' ) && has_post_thumbnail( $post->ID ) && ! is_attachment( $post ) && ! $post_password_required ) {
$classes[] = 'has-post-thumbnail';
}
// Sticky for Sticky Posts.
if ( is_sticky( $post->ID ) ) {
if ( is_home() && ! is_paged() ) {
$classes[] = 'sticky';
} elseif ( is_admin() ) {
$classes[] = 'status-sticky';
}
}
// hentry for hAtom compliance.
$classes[] = 'hentry';
// All public taxonomies.
$taxonomies = get_taxonomies( array( 'public' => true ) );
foreach ( (array) $taxonomies as $taxonomy ) {
if ( is_object_in_taxonomy( $post->post_type, $taxonomy ) ) {
foreach ( (array) get_the_terms( $post->ID, $taxonomy ) as $term ) {
if ( empty( $term->slug ) ) {
continue;
}
$term_class = sanitize_html_class( $term->slug, $term->term_id );
if ( is_numeric( $term_class ) || ! trim( $term_class, '-' ) ) {
$term_class = $term->term_id;
}
// 'post_tag' uses the 'tag' prefix for backward compatibility.
if ( 'post_tag' === $taxonomy ) {
$classes[] = 'tag-' . $term_class;
} else {
$classes[] = sanitize_html_class( $taxonomy . '-' . $term_class, $taxonomy . '-' . $term->term_id );
}
}
}
}
$classes = array_map( 'esc_attr', $classes );
/**
* Filters the list of CSS class names for the current post.
*
* @since 2.7.0
*
* @param string[] $classes An array of post class names.
* @param string[] $class An array of additional class names added to the post.
* @param int $post_id The post ID.
*/
$classes = apply_filters( 'post_class', $classes, $class, $post->ID );
return array_unique( $classes );
}
Cвязанные функции