Вывод дочерних категорий на любой из дочерних категорий Woocommerce

Задча: отображать в сайдбаре дочерние категории товаров текущей родительской категории

  • eye 67
  • 1

В одном из проектов по дизайну задача стояла отображать дочерние рубрики категории да так, чтобы находясь при этом в одной из этих дочерних рубрик, всё равно отображать дочерние рубрики главной родительской категории.

Благо, что был всего один уровень вложенности, поэтому решение задачи заключается в следующем:

  1. Для начала проверим есть ли у текущей рубрики дочерние рубрики:
    $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $parent_cat_ID,
       'taxonomy' => 'product_cat'
    );
    $subcats = get_categories($args);
    
  2. Дальше если дочерних категорий не было найдено, поищем дочерние категории у родительской:
    if(!$subcats){
    	$parent = get_term_by( 'id', $parent_cat_ID, 'product_cat' );
    $args = array(
         'hierarchical' => 1,
         'show_option_none' => '',
         'hide_empty' => 0,
         'parent' => $parent->parent,
         'taxonomy' => 'product_cat'
      );
    	$subcats = get_categories($args);
    }
    if(!$subcats){
    	return;
    }
    
  3. Ну, и если снова не было обнаружено никаких категорий, то выходим совсем

Весь код целиком:

function woocommerce_subcats_from_parentcat_by_ID_for_sidebar($parent_cat_ID) {
    $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $parent_cat_ID,
       'taxonomy' => 'product_cat'
    );
  $subcats = get_categories($args);
  if(!$subcats){
    $parent = get_term_by( 'id', $parent_cat_ID, 'product_cat' );
  $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $parent->parent,
       'taxonomy' => 'product_cat'
    );
    $subcats = get_categories($args);
  }
  if(!$subcats){
    return;
  }
    $out = "";
    $out = '<div class="sidebar__body"><ul class="sidebar__menu">';
      foreach ($subcats as $sc) {
        $link = get_term_link( $sc->slug, $sc->taxonomy );
          $out .= '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
      }
    $out .= '</ul></div>';

    return $out;
}

Вызывается в шаблоне archive-product.php:

$cate = get_queried_object();
$cateID = $cate->term_id;
echo (is_shop()) ? '' : woocommerce_subcats_from_parentcat_by_ID_for_sidebar($cateID);
comments powered by HyperComments

Поделиться

На вашу почту будет отправлена одноразовая ссылка на портфолио

Отправлено!

Что-то пошло не так... Попробуйте отправить позже