@alexiusgrey

Как можно задать класс только родительским категориям в кастомном цикле?

Мне по дизайну надо вывести на индивидуальной странице категории с подкатегориями. Нюанс в том, что подкатегории и категории без дочерних категорий выводились с картинками, а родительские категории без картинок.
Вывожу вот таким кодом
<div class="cat-container">
                     <?php

                             $categories = get_terms(
                                 'product_cat',
                                 array(
                                     'orderby'    => 'menu_order',
                                     'order' => 'ask',
                                     'hierarchical' => true,
                                     'hide_empty' => 1,
                                     'parent' => 0
                                 )
                             );

                               foreach($categories as $cat){
                              $cat_thumb_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
                              $cat_thumb_url = wp_get_attachment_image_src( $cat_thumb_id, 'thumbnail-size' )[0];
                              ?>
                                    <div class="cat-sub">
                                        <?php $temp_cat = get_terms(
                                                 'product_cat',
                                                 array(
                                                     'orderby'    => 'menu_order',
                                                     'order' => 'ask',
                                                     'hierarchical' => true,
                                                     'hide_empty' => 1,
                                                     'parent' => $cat->term_id
                                                 )
                                             );

                                             $class='';
                                             if($temp_cat) {$class='has_child';} else {$class='no_child';} ?>
                                          <div class="parent-item-wrap d-flex justify-content-center">
                                             <div class="cat-parent-item col-lg-5 col-12 product-category">
                                                <div class="subcategory-inner">
                                                    <a href="<?php echo get_term_link( $cat->term_id,'product_cat' )?>" target='_blank'>
                                                      <img src="<?php echo $cat_thumb_url; ?>" alt="" /> 
                                                      <h2 class="woocommerce-loop-category__title"><?php echo $cat->name?></h2>
                                                   </a>
                                                 </div>
                                            </div>
                                         </div>                                  
                                 <?php
                                    if($temp_cat){?>
                                       <div class="child-items d-flex flex-wrap align-items-stretch">
                                              <?php foreach($temp_cat as $temp){
                                               $cat_thumb_id = get_woocommerce_term_meta( $temp->term_id, 'thumbnail_id', true );
                                               $cat_thumb_url = wp_get_attachment_image_src( $cat_thumb_id, 'thumbnail-size' )[0]; 
                                                ?> 
                                                <div class="cat-item col-xl-3 col-md-4 col-sm-6 col-12 product-category">
                                                   <div class="subcategory-inner">
                                                      <a href="<?php echo get_term_link( $temp->term_id,'product_cat' )?>" target='_blank'>
                                                         <img src="<?php echo $cat_thumb_url; ?>" alt="" />                             
                                                         <h2 class="woocommerce-loop-category__title"><?php echo $temp->name; ?></h2>  
                                                      </a>
                                                   </div>
                                                </div>   
                                          <?php }?>
                                       </div>
                                       <?php } ?>
                              </div>      
                        <?php } ?>      
                  </div>

Если я просто уберу
<img src="<?php echo $cat_thumb_url; ?>" alt="" />
из .cat-parent-item, то картинки не отобразятся и в категориях, которые не родительские и не дочерние, у которых нет дочерних. При создании меню есть такой класс, как has_children, как можно прицепить его только к родительским категориям?
  • Вопрос задан
  • 10 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
В объекте, который возвращает get_terms() есть ключ parent, по которому можно проверить наличие родительской категории

$categories = get_terms();
foreach ( $categories as $key => $category ) {
	if ( $category->parent == 0 ) {
		# нет родителя
	} else {
		# есть родитель
	}
}


При желании можно обернуть это все в отдельную функцию

function is_category_parent( $cat_id ) {
	$category = get_category( $cat_id );
	if ( $category->parent == 0 ) {
		return true;
	}
	return false;
}


И использовать ее

if ( is_category_parent( $cat_id ) ) {
	// категория имеет родителя
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы