Функция cat_is_ancestor_of()
в WordPress проверяет, является ли одна категория предком другой категории. Это полезно, когда вам нужно определить, связаны ли две категории иерархически. Функция возвращает true
, если категория A является предком категории B, и false
в противном случае.
bool cat_is_ancestor_of( int $cat1, int $cat2 )
Параметры
$cat1
(int): ID предполагаемой родительской категории.$cat2
(int): ID категории, которую нужно проверить.
Возвращаемое значение
- (bool): Возвращает
true
, если$cat1
является предком$cat2
, иfalse
в противном случае.
Пример использования
Допустим, у нас есть две категории: «Новости» (ID 3) и «Мировые новости» (ID 7). Мы хотим проверить, является ли «Новости» предком «Мировые новости».
$parent_category_id = 3; // Новости
$child_category_id = 7; // Мировые новости
if ( cat_is_ancestor_of( $parent_category_id, $child_category_id ) ) {
echo 'Новости является предком Мировые новости';
} else {
echo 'Новости не является предком Мировые новости';
}
Использование в реальном проекте
Предположим, вы хотите изменить стиль или добавить определенные классы к постам, принадлежащим категориям, которые находятся в иерархии определенной родительской категории. В этом примере мы добавим класс к постам, принадлежащим подкатегориям категории «Новости».
function genius_add_custom_class_to_posts( $classes ) {
if ( is_single() && has_category() ) {
$parent_category_id = 3; // Новости
$categories = get_the_category();
foreach ( $categories as $category ) {
if ( cat_is_ancestor_of( $parent_category_id, $category->term_id ) ) {
$classes[] = 'news-category';
break;
}
}
}
return $classes;
}
add_filter( 'post_class', 'genius_add_custom_class_to_posts' );
В данном примере, если пост принадлежит категории, которая является потомком категории «Новости», к этому посту будет добавлен класс news-category
. Это позволит вам стилизовать такие посты по-разному с помощью CSS.
.news-category {
background-color: #f0f8ff;
border-left: 5px solid #0000ff;
}
Этот пример демонстрирует, как cat_is_ancestor_of()
может быть использована для динамического изменения стилей постов в зависимости от их категории.
Дополнительный пример
В следующем примере показано, как с помощью условных тегов в файле archive.php
вашей темы выводить разное содержимое в зависимости от отображаемой категории. Это удобно, когда нужно выводить определенный элемент для всех вложенных категорий конкретной родительской категории, вместо использования отдельных файлов category-slug.php
для каждой категории.
Приведенный ниже фрагмент кода проверяет, обрабатывается ли категория «Музыка» (ID 4). Если да, то он выводит меню wp_nav_menu
для архива категории «Музыка» и всех ее подкатегорий (например, «джаз», «классика»).
<?php
if (cat_is_ancestor_of(4, $cat) or is_category(4)): ?>
<div id="music_subnav_menu" class="subnav_menu">
<?php wp_nav_menu( array('menu' => 'Music' )); ?>
</div>
<?php endif; ?>
Заключение
Функция cat_is_ancestor_of()
является мощным инструментом для работы с категориями в WordPress. Она позволяет легко проверять иерархические отношения между категориями, что может быть полезно для стилизации постов, создания навигации и других задач.