Описание
Проверяет принадлежит ли текущий или указанный пост к указанной категории.
Проверяется прямая принадлежность поста к категории, т.е. содержит ли указанная категория текущий/указанный пост. Если, например, пост принадлежит родительской категории или дочерней к указанной, то функция вернет false. Чтобы проверить отношение поста к дереву категорий используйте функцию post_is_in_descendant_category() (см. пример ниже).
Эту функцию можно использовать внутри Цикла WordPress или за пределами Цикла WordPress, но на отдельной странице поста (single.php), или можно использовать где угодно, если указать какой именно пост нужно проверить.
Функция возвращает true, если условие выполняется и false, если нет.
Использование
<?php in_category( $category, $_post ) ?>
Параметры
- $category (строка/массив/число) (обязательный)
- (число) ID , название или (строка) альтернативное название категории с которой нужно сравнить пост. Также можно указать вперемешку несколько параметров в массиве.
По умолчанию: нет - $_post (число/объект)
- ID или объект поста. По умолчанию текущий пост определяется автоматически внутри Цикла WordPress или на странице поста.
По умолчанию: нет
Примеры
1. Проверка текущего поста внутри Цикла WordPress.
in_category часто используется внутри Цикла, чтобы проверить относится ли пост к указанной категории, если "да", то сделать какие-либо действия:
<?php
if ( in_category( 'pachyderms' )) {
// действия, если пост относится к категории 'pachyderms'
} elseif ( in_category( array( 'Tropical Birds', 'small-mammals' ) )) {
// действия, если пост относится к одной из категорий 'Tropical Birds', 'small-mammals'
} else {
// если никакие из предыдущих условий не выполнены.
}
?>
П.С. Лучше указывать на названия, а ID категории для проверок
2. Проверка текущего поста за пределами Цикла.
На странице поста (обычно это фалй шаблона single.php) проверку можно выполнять за пределами Цикла:
<?php
if ( in_category('fruit') ) {
include 'single-fruit.php';
} elseif ( in_category('vegetables') ) {
include 'single-vegetables.php';
} else {
// Ниже начинается Цикл WordPress
if ( have_posts() ) : while ( have_posts() ) : the_post();
// ...
}
?>
3. Проверка принадлежности поста к текущей или вложенной в ткущую категории.
Бывают случаи, когда нужно проверить является ли пост к дереву категорий. Например, мы указываем в проверке ID категории 60, а пост принадлежит категории с ID 70 и функция in_category возвращает false, а на деле категория 70, дочерняя категория категории 60.
Для того, чтобы проверить принадлежность к дереву категорий, можно последовательно указать в массиве все названия категорий:
<?php if ( in_category( array( 'Фрукты', 'Яблоко', 'Бананы', 'Груши', 'Сливы' ) )) {
// Действие если выполнено условие
}
?>
Такой подход проверки, совершенно не гибкий, потому что если мы добавим новую подкатегорию к категории "Фрукты", нам так же нужно будет добавить её и в массив, для проверки.
Чтобы избежать таких сложностей можно воспользоваться такой проверкой:
// Проверка принадлежности поста к категории "Фрукты" или любой вложенной в эту категорию категории.
<?php if ( in_category( 11 ) || post_is_in_descendant_category( 11 ) ) {
// Здесь все "фрукты"
}
?>
Также, менее желательный, но все же вариант, указать названия:
post_is_in_descendant_category( get_term_by( 'name', 'fruit', 'category' ) )
Так выглядит функция post_is_in_descendant_category():
function post_is_in_descendant_category( $cats, $_post = null )
{
foreach ( (array) $cats as $cat ) {
// get_term_children() accepts integer ID only
$descendants = get_term_children( (int) $cat, 'category');
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
?>
in_category()
из файла: /wp-includes/category-template.php WP 3.3.2function in_category( $category, $post = null ) {
if ( empty( $category ) )
return false;
return has_term( $category, 'category', $post );
}Связанные Функции
- cat_is_ancestor_of() view
- post_password_required() view
- wp_attachment_is_image() view
- has_tag() view
- is_post_type_archive() view
- is_author() view
- is_day() view
- is_multi_author() view
- is_page() view
- is_search() view
- is_singular() view
- is_tax() view
- is_time() view
Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
Спасибо огромное! Долго искал что-то на подобии функции post_is_in_descendant_category и нашел у вас. И именно точно мне было нужно!