Различные шаблоны для различных уровней вложенности таксономий

Привяжем разные шаблоны к уровням вложенности категорий

Бывает такая ситуация когда различному уровню вложенности пользовательской таксономии необходимо назначить свой шаблон. К примеру Вы мы создали пост тайп «Товары», и к нему таксономию «Категория». А что делать если нужно товары в категории разбить, например, на коллекции, и использовать для этого другой шаблон?

Сразу оформлю код, а в дальнейшем его поясню.


function get_cat_lvl($cat_id, $taxonomy){
  $max_depth_to_test = intval(9); // максимальная глубина подкатегорий
  $last_depth = 0;
  $term = get_term_by( 'id', $cat_id, $taxonomy );
  for ( $counter = 1; $counter <= $max_depth_to_test; $counter += 1) { 
    if ($term->parent) {
      $term=get_term_by( 'id', $term->parent, $taxonomy );
      $last_depth = $counter;
    }
  }
  $last_depth +=1;
  return $last_depth;
}

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$cat_level = get_cat_lvl($term->term_id, get_query_var( 'taxonomy' ));
switch ($cat_level) {
  case 0:
  break;
  case 1:
    // Категория каталога
    get_template_part('pf-tax-category');
  break;
  case 2:
    // Брэнд
    get_template_part('pf-tax-manufacturer');
  break;
  case 3:
    // Коллекция
    get_template_part('pf-tax-collection');
  break;
}

Функция get_cat_lvl($cat_id, $taxonomy) получает уровень вложенности таксономии. К примеру первый уровень категории (вернет 1), второй — подкатегории (вернет 2) итд. Максимум до 9 уровней. Мне кажется более чем достаточно для наших целей. Функцию желательно разместить в functions.php

Далее собственно идет код шаблона таксономии. Например в файле taxonomy-product-category.php. Получаем текущий термин таксономии, получаем вложенность термина нашей чудо функцией.


$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$cat_level = get_cat_lvl($term->term_id, get_query_var( 'taxonomy' ));

Далее все еще проще. Оператором switch подключаем нужный шаблон в зависимости от вложенности.

Профит.