Хук post_class
позволяет фильтровать и изменять список CSS классов, которые назначаются посту при его отображении на сайте. Этот хук очень полезен, когда вы хотите добавить специфичные классы для постов в зависимости от их контента или состояния. Он часто используется для улучшения визуального отображения записей или для стилизации отдельных элементов на страницах.
apply_filters( ‘post_class’, string[] $classes, string[] $css_class, int $post_id )
Функция post_class
применяется для назначения классов CSS постам, чтобы разработчики могли использовать их в стилях для управления отображением постов на сайте. Хук post_class
дает возможность фильтровать массив классов, который присваивается каждой записи.
Параметры
- $classes (array): Массив классов CSS для текущей записи.
- $css_class (array): Массив дополнительных классов, которые были добавлены к записи.
- $post_id (int): ID поста, к которому применяются классы.
Когда срабатывает хук
- При отображении записи: Хук срабатывает, когда вызывается функция
get_post_class()
или аналогичные функции, применяющие классы к записям. - На фронтэнде и в админке: Хук работает как на пользовательской части сайта, так и в админке (например, на странице списка записей в админ-панели).
Пример 1: Добавление CSS класса, если у записи нет миниатюры
По умолчанию, если у записи нет миниатюры, WordPress не добавляет никаких классов. Однако, мы можем изменить это поведение, добавив кастомный класс no-post-thumbnail
для записей без миниатюры.
add_filter( 'post_class', 'add_class_without_post_thumbnail', 10, 3 );
function add_class_without_post_thumbnail( $classes, $class, $post_id ) {
// Проверяем, есть ли у записи миниатюра
if ( ! has_post_thumbnail( $post_id ) ) {
// Добавляем класс для записей без миниатюры
$classes[] = 'no-post-thumbnail';
}
return $classes;
}
В этом примере для всех записей, у которых нет миниатюры, будет добавлен класс no-post-thumbnail
. Это может быть полезно для стилизации таких записей по-другому, например, для отображения дефолтного изображения.
Пример 2: Добавление кастомного класса для записей с определенным мета-полем
Предположим, что у вас есть мета-поле для поста, которое указывает, завершен ли профиль пользователя (например, в профилях авторов). Мы можем добавить CSS класс profile-incomplete
для записей, у которых этот профиль не завершен.
add_filter('post_class', 'set_row_post_class', 10, 3);
function set_row_post_class($classes, $class, $post_id) {
// Проверяем, находимся ли мы в админке
if ( ! is_admin() ) {
return $classes;
}
// Получаем мета-данные для поста
$profile_incomplete = get_post_meta($post_id, 'profile_incomplete', true);
// Если профиль не завершен, добавляем класс
if ('yes' === $profile_incomplete) {
$classes[] = 'profile-incomplete';
}
return $classes;
}
В этом примере для всех записей в админ-панели, у которых мета-поле profile_incomplete
установлено в значение «yes», будет добавлен класс profile-incomplete
. Это можно использовать для визуального выделения таких записей в списке.
Пример 3: Условное добавление классов в зависимости от типа записи
Иногда бывает полезно добавлять специфичные классы для различных типов записей. В следующем примере добавляется класс featured-post
, если запись является записью типа article
и была опубликована более 30 дней назад.
add_filter('post_class', 'add_featured_post_class', 10, 3);
function add_featured_post_class($classes, $class, $post_id) {
$post = get_post($post_id);
// Проверяем, является ли тип записи 'article' и опубликована ли запись более 30 дней назад
if ('article' === $post->post_type && (time() - strtotime($post->post_date)) > 30 * DAY_IN_SECONDS) {
$classes[] = 'featured-post';
}
return $classes;
}
В этом примере для записи типа article
, которая была опубликована более 30 дней назад, добавляется класс featured-post
. Это можно использовать для выделения таких записей на сайте.
Заключение
Хук post_class
предоставляет удобный способ для изменения или добавления CSS классов к постам в WordPress. Вы можете использовать его для улучшения визуальной стилизации, добавления специальных классов в зависимости от состояния или содержания поста, или для работы с мета-данными. С помощью этого хука легко адаптировать внешний вид записей на сайте, улучшая пользовательский опыт или адаптируя интерфейс для администраторов.