wp_list_categories () — отображать категории первого уровня и только детей текущего термина на странице подкатегории

Я использую WordPress.

Есть несколько категорий со своими подкатегориями. На общей странице я показываю все категории первого уровня. Вот мой код:

$args = array(
'type' => 'product-items',
'child_of'  => 0,
'parent'  => '',
'order' => 'DESC',
'hide_empty' => 0,
'hierarchical' => 1,
'exclude' => '',
'include' => '',
'number' => '',
'taxonomy' => 'product-category',
'pad_counts' => false,
'depth' => 1,
'title_li' => ''
);
wp_list_categories($args);

После того, как вы нажмете и войдете в категорию первого уровня, вам нужно будет увидеть только ее подкатегории. Когда я удаляю 'depth' => 1, В этом случае все дочерние элементы отображаются в родительской категории, но для скорости загрузки / загрузки страницы на подстранице мне нужно показать все категории первого уровня, но только дочерние категории текущей категории.

Например, у меня есть ниже 3 категории:

  • Категория 1
  • Категория 2
  • Категория 3

Представьте, что я нажимаю на «Категория 1». Теперь это так:

  • Категория 1
    • 1-я подкатегория 1
    • 2-я подкатегория 1
    • 3-я подкатегория 1
  • Категория 2
    • 1-я подкатегория из 2
      • 1-й суб 2-го разряда
      • 2-й суб 2-го разряда
      • 3-й суб 2-го разряда
    • 2-я подкатегория из 2
    • 3-я подкатегория из 2
  • Категория 3
    • 1-я подкатегория из 3
    • 2-я подкатегория из 3
    • 3-я подкатегория из 3

Но мне нужно, чтобы это было так на подстранице:

  • Категория 1
    • 1-я подкатегория 1
    • 2-я подкатегория 1
    • 3-я подкатегория 1
  • Категория 2
  • Категория 3

Не уверен, как этого добиться с wp_list_categories() функция. Есть идеи, пожалуйста?

2

Решение

Было бы лучше, если бы вы использовали 2 get_terms () вместо wp_list_categories. Это было бы быстрее и настраиваемым. Один для родительских категорий, другой для детей текущей категории. Вот рабочий пример:

   function display_cats($cats,$current=0,$current_children=array()){
$ret= '<ul>';
foreach ($cats as $cs){
$children=($current!=$cs->term_id)?'':display_cats($current_children);
$ret.= '<li> <a href="'.get_term_link($cs->term_id).'"> '.$cs->name.'</a> '.$children.' </li>
';
}
$ret.= '</ul>';
return $ret;
}$current_cat=9;//for example
$parents=get_terms('product_cat',array('taxonomy'=>'product_cat','echo'=>false,'depth'=>0));
$current_children=get_terms('product_cat',array('taxonomy'=>'product_cat','child_of'=>  $current_cat ,'echo'=>false));
echo display_cats($parents,$current_cat,$current_children);
1

Другие решения

Я бы взял get_terms() дорожка.
Что-то вроде

$terms = get_terms($args);

foreach($terms as $term){
// If $term is current term use get_terms() again to fetch its children
}

https://developer.wordpress.org/reference/functions/get_terms/

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector