Проверьте, относится ли текущая запись к родительской категории или к ее подкатегориям

#wordpress #function #categories #archive

Вопрос:

У меня более 200 категорий, и мне нужно иметь возможность проверить, соответствует ли текущая категория (на category.php) находится в массиве родительских категорий.

Я прочитал массу способов проверить, относятся ли СООБЩЕНИЯ К категории или подкатегории, или если ОДНА кошка является РЕБЕНКОМ или РОДИТЕЛЕМ другой. Но я не могу найти никаких функций WP или вопросов, касающихся проверки того, находится ли текущий кот в массиве родительских категорий.

Вот чего я пытаюсь достичь:

  • Родитель 1 (идентификатор 1)
    • ребенок 1 (ID 5)
    • ребенок 2 (ID 6)
    • ребенок 3 (ID 7)
      • внук 1 (ID 8)
  • Родитель 2 (идентификатор 2)
  • Родитель 3 (идентификатор 3)
  • Родитель 4 (идентификатор 4)

Мне нужно сделать что-то вроде этого:

 IF( cat_is_child_of( array(1,2,3,4)) ):
    Do something amazing
ELSE
    The current category is NOT within any of the parent categories for the ID's given
ENDIF
 

Есть какие-нибудь идеи???

         <?php if (
                is_post_type_archive( 'inventory' ) 
                || get_post_type( get_the_ID() ) == 'inventory' 
                  // check if category IS one of these parent cats
                || is_category(array( 25,28,124,297,298,299 )) 
                  // ugly version of checking if this cat is SUB of any parent cats
                || cat_is_ancestor_of(25, get_query_var( 'cat' ))
                || cat_is_ancestor_of(124, get_query_var( 'cat' ))
                || cat_is_ancestor_of(297, get_query_var( 'cat' ))
                || cat_is_ancestor_of(298, get_query_var( 'cat' ))
                || cat_is_ancestor_of(299, get_query_var( 'cat' ))
            ):
            ?>

 

Ответ №1:

После тонны поисков и только придумывания функций, которые проверяли, есть ли в категории подкатегории, есть ли сообщение в (только) подкатегории, я наткнулся на старое сообщение с функцией, которая работает:

 if ( ! function_exists( 'post_is_in_a_subcategory' ) ) {
function post_is_in_a_subcategory( $categories, $_post = null ) {
    foreach ( (array) $categories as $category ) {
        // get_term_children() only accepts integer ID
        $subcats = get_term_children( (int) $category, 'category' );
        if ( $subcats amp;amp; in_category( $subcats, $_post ) )
            return true;
    }
    return false;
  }
}
 

и как я его использую:

         <?php if (
            is_post_type_archive( 'inventory' ) 
            || get_post_type( get_the_ID() ) == 'inventory' 
            // in one of the parent cats?
            || is_category(array( 25,28,124,297,298,299 )) 
            // in ANY of the subcats?
            || post_is_in_a_subcategory( array( 25,28,124,297,298,299 ) )
            
        ):
        ?>
 

Исходная функция была в кодексе WordPress, например, которого НЕ было в ядре. http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category с тех пор он был удален!