Intereting Posts
Лучший способ для нескольких мета-ящиков Добавить иерархическую таксономию в permalink для пользовательского типа сообщения Проблемы с использованием 'add_role' Шаблоны пользовательских сообщений get_template_part vs action hooks в темах Подробный плагин формы, с возможностью экспорта в Excel и т. Д. Или редактировать PDF в реальном времени? WordPress CPT slug и конфликты страниц Как заменить настройки в плагине WordPress из темы Как получить текущее имя пункта меню страницы, а не полный список пунктов меню WordPress Theme Validator? Крюк, чтобы получить шаблон страницы, который используется на экране редактирования страницы администратора? Получить текущее сообщение с идентификатором изображения Следующая и предыдущая ссылка в пользовательском типе сообщения в том же таксономии Отображать только липкую запись или последнее сообщение в пользовательском цикле Найти элемент таблицы стилей родительской темы $, когда он регистрирует таблицу стилей

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

Я нашел следующий фрагмент кода в теме базы знаний WP , чтобы показать подкатегории родительской категории. Проблема в том, что это работает только для первого уровня иерархии, поэтому я хотел изменить предложение if, чтобы проверить, есть ли у текущей категории дети, но я не знаю, как это сделать, любая идея? благодаря

global $term_meta, $cat, $cat_id, $wp_query; // Check if the current category is not a first level category // This will happen if the current category does not have any child // If this is the case, then we simply show all it's posts // Instead of the nice knowledgebase type things if ( $cat->parent != '0' ) { 

Solutions Collecting From Web of "Проверьте, есть ли в текущей категории подкатегории"

Вы можете использовать этот простой вызов функции, который возвращает TRUE или FALSE зависимости от того, является ли $children пустым массивом или нет.

 /** * Check if given term has child terms * * @param Integer $term_id * @param String $taxonomy * * @return Boolean */ function category_has_children( $term_id = 0, $taxonomy = 'category' ) { $children = get_categories( array( 'child_of' => $term_id, 'taxonomy' => $taxonomy, 'hide_empty' => false, 'fields' => 'ids', ) ); return ( $children ); } 

Поэтому, если вы используете только встроенные категории сообщений, вы можете вызвать функцию следующим образом: category_has_children( 17 );

Если вам нужно проверить обычную таксономию, она будет работать почти так же, вам просто нужно передать дополнительный параметр «taxonomy-slug»: category_has_children( 7, 'my_taxonomy' ); '

Чтобы вызвать его в своем IF-заявлении:

 if( $cat->parent != 0 && ! category_has_children( $cat->term_id ) ) 

Для этого есть встроенная функция, нет необходимости создавать для нее настраиваемую функцию. Функция называется get_term_children() и вернет либо

  • Массив дочерних терминов, если данный термин имеет детей

  • Пустой массив, если не найдены никакие дочерние члены

  • Объект WP_Error если таксономия не существует

Имея это в виду, оберните get_term_children() в функции и верните true или false в зависимости от возвращаемого значения, если вам просто нужно булево значение (например, условный тег)

 function has_term_have_children( $term_id = '', $taxonomy = 'category' ) { // Check if we have a term value, if not, return false if ( !$term_id ) return false; // Get term children $term_children = get_term_children( filter_var( $term_id, FILTER_VALIDATE_INT ), filter_var( $taxonomy, FILTER_SANITIZE_STRING ) ); // Return false if we have an empty array or WP_Error object if ( empty( $term_children ) || is_wp_error( $term_children ) ) return false; return true; } 

Вы можете просто просто передать термин id функции и правильное имя таксономии, если таксономия – это что-то другое, кроме category , и вы получите значение boolen так же, как и создание условных тегов, правда, если успех имеет успех, если у этого термина есть дети , false, если это не так.

 if ( has_term_have_children( 21 ) ) { // Do something if term 21 have children } 

Получить имя дочерних категорий. Я использовал функцию @ Howdy_McGee для более быстрого и итеративного процесса.

 function category_has_children( $term_id = 0, $post_type = 'post', $taxonomy = 'category' ) { $children = get_categories( array( 'child_of' => $term_id, 'type' => $post_type, 'taxonomy' => $taxonomy, 'order' => 'ASC', 'orderby' => 'name' ) ); if($children){ echo '<ul>'; foreach ($children as $value) { echo '<li>'; echo '<a href="'.get_bloginfo("siteurl").'/category/'.$value->slug.'" >'.$value->name.'</a>'; echo '</li>'; } echo '</ul>'; } } $cId = get_cat_id('cms'); /* cms is the parent category */ category_has_children($cId, 'post', 'category'); 

Это будет отображать всю подкатегорию (дочерняя) родительской категории.

Это то, что я использую. Переменная $ cat – это идентификатор категории, который вы проверяете:

 $categories = get_categories($cat); if (!empty($categories)) { // This Category has children } else { // This category has no children } 

Используйте эту функцию cat_has_subcat('paste cat id') чтобы проверить, что категория имеет какие-либо подкатегории или нет.

 //paste it in your function.php //start function cat_has_subcat($catId){ $args = array( 'taxonomy' => 'product_cat', 'orderby' => 'name', 'parent' => $catId, 'show_count' => 0, 'pad_counts' => 0, 'hierarchical' => 1, 'title_li' => '', 'hide_empty' => false ); $cats = get_categories($args); if(!empty($cats)){ return $catId; } } //end