Функция post_class()
выводит HTML-атрибут class=""
с содержащимися в нем классами, которые WordPress присваивает для постов. В итоге для каждого поста получаем уникальный набор классов CSS. Если вам нужно не вывести классы, а записать в переменную, то обратите внимание на get_post_class().
Я уже рассматривал функцию body_class(), которую нужно было добавлять в тег <body>
. Функцию же post_class()
мы вставляем в тег <div>
, в который заключен пост (или его анонс), примерно вот так <div <?php post_class() ?>>
.
Полученные классы перед выводом в атрибуте также будут пропущены через очистку esc_attr().
Если в функцию не передавать второй параметр, то она срабатывает для текущего поста в цикле WordPress, про циклы смотрите мой видеоурок.
post_class( $class = '', $post_id = null )
Специально для вашего удобства составил таблицу добавляемых классов.
Условие | Добавляемые классы |
---|---|
Одинаковые для всех постов | post-{ID поста} , type-{тип поста} , status-{статус поста} , hentry , а также классы, указанные в параметре функции $class . |
!is_admin() | {тип поста} |
Если данным типом поста поддерживаются форматы | format-{название формата} либо format-standart , если формат данной записи не установлен. |
Если пост запаролен | post-password-required и post-password-protected , если пароль записи задан |
Если пост не запаролен, не является вложением и имеет установленную миниатюру | has-post-thumbnail |
Если прилепленный пост, условие is_sticky() | Если выполняются два следующих условия is_home() и !is_paged() — sticky ,иначе если выполняется is_admin() — status-sticky . |
Если пост находится в одной или нескольких категориях | category-{ярлык категории} (либо category-{ID категории} , если при очистке функцией sanitize_html_class() ярлык категории превратился в пустую строку) |
Если посту присвоены метки | tag-{ярлык метки} (либо tag-{ID метки} ) |
Если пост принадлежит к таксономии | {таксономия}-{ярлык термина} (либо {таксономия}-{ID термина} ) |
Для того, чтобы вывести ID поста, воспользуемся функцией the_ID().
<div id="post-<?php the_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».Предположим, что вы натягиваете вёрстку на WordPress и у нашего блока <div>
уже есть атрибут class, при этом вы решили, что будете использовать функцию post_class()
. Как всё это можно сочетать?
Например нам нужно так:
<div class="myclass1 myclass2"></div>
Тогда мы делаем так:
<div <?php post_class( array( 'myclass1', 'myclass2' ) ) ?>></div>
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
а как избавиться от hentry? Поможете посоветовать?
Конечно, вот код для
functions.php
:Задача схожая, но я так и не разобралась, совсем не программист. Можно ли в конструкцию создания переменной, формирующей перечень атрибутов блока $post_mega_attributes[] = 'data-style="' . $zero_type . '"'; добавить id или имя категории? Я шла методом тыка, результата конечно же не добилась. Не понимаю — куда и как нужно добавить post_class() в эту конструкцию. Спасибо.
А это прямо в HTML добавляйте, не через
post_class()
.