Как скрыть определенные подкатегории WooCommerce в каталоге товаров

WooCommerce предоставляет некоторый уровень контроля над выводом подрубрик на странице вашего магазина/товарной категории с помощью опций «Показывать подкатегории на странице категории » и «Показывать подкатегории на странице магазина», найти которые можно в разделе WooCommerce > Настройки > Товары > Отображение. Эти настройки позволят вам либо вывести ВСЕ подрубрики на странице категории, либо же отобразить все подрубрики на странице магазина. Если же вам нужны более гибкие настройки, например вывести только определенные подрубрики на странице магазина, или определенные подрубрики в указанной товарной категории, то вам придется написать несколько строк кода, применив один из нескольких вариантов реализации.

Существующие в WooCommerce настройки позволяют только лишь скрыть все или ни одну из подрубрик:

wc-admin-settings-catalog-subcats[1]

Чтобы прояснить суть того, о чем мы говорим: целью стоит скрыть, например, только выделенную подкатегорию ‘WordPress Plugins’, оставив ‘Magento Extensions’ как на примере ниже:

wc-shop-page-subcategories[1]

Фильтр get_terms

Наверное, самым простым и понятным пользователем способом будет применить хук к фильтру ядра ‘get_terms‘. Этот фильтр применяется посредством вызова get_categories(), которая вызывается функцией шаблона woocommerce_product_subcategories(), ответственной за отображение товарных подкатегорий на страницах магазина/категорий. Нам нужно перехватить этот фильтр, протестировать на предмет таксономии/страницы, на которой мы находимся, а затем отобразить рубрики:

add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );

function get_subcategory_terms( $terms, $taxonomies, $args ) {

  $new_terms = array();

  // если находится в товарной категории и на странице магазина
  if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_shop() ) {

    foreach ( $terms as $key => $term ) {

      if ( ! in_array( $term->slug, array( 'donation' ) ) ) {
        $new_terms[] = $term;
      }

    }

    $terms = $new_terms;
  }

  return $terms;
}

Код выше исключит рубрику ‘donation’ со страницы магазина. Исключить другие рубрики можно просто добавив их в массив. Исключение подрубрик со страницы рубрики можно сделать путем замены вызова is_shop() на is_product_category() (для всех рубрик), или is_product_category( id|name|slug ) для того, чтобы применить к нужной рубрике (ее id или slug).

Этот код вы можете поместить как обычно в файл functions.php вашей темы или в плагин для сайта WordPress.

Другие способы

Код выше позволяет не перезаписывать функции и шаблоны, а просто добавить одну в файл. Единственным недостатком вышеописанного способа является то, что он будет применяться ко всем вызовам get_categories(), которые делаются для товарной категории, когда is_shop(), is_product_category() будут активны. Более продуманным решением будет перезаписать: либо функцию шаблонаwoocommerce_product_subcategories(), либо же шаблон content-product_cat.php.

Функция шаблона woocommerce_product_subcategories() располагается в woocommerce/woocommerce-template.php, и может быть перезаписана путем копирования функции в файл functions.php вашей темы, после чего ее нужно модифицировать, включив в нее сниппет следующим образом:

...

$args = array(
  'child_of'     => $product_category_parent,
  'menu_order'   => 'ASC',
  'hide_empty'   => 1,
  'hierarchical' => 1,
  'taxonomy'     => 'product_cat',
  'pad_counts'   => 1
);

// начало модификации
if ( is_shop() ) {
  $args['exclude'] = "95,96";
}
// окончание модификации

$product_categories = get_categories( $args  );

...

где $args[‘exclude’] является списком id рубрик, подлежащих исключению и разделенных запятыми.

Шаблон

Еще одним способом реализации может стать перезапись файла шаблона woocommerce — woocommerce/templates/content-product_cat.php путем копирования его в your-theme/woocommerce/content-product_cat.php и добавления в его начало следующего кода:

if ( is_shop() && in_array( $category->slug, array( 'donation' ) ) ) {
  return;
}

Естественно, вам нужно указать подкатегории, которые нужно исключить, и использовать условные теги для применения к определенным страницам.

Мы надеемся, что эта статья помогла вам скрыть определенные подкатегории WooCommerce в каталоге товаров.

Если вы начинаете разбираться с WooCommerce, то не забудьте посетить нашу рубрику WooCommerce, где мы публикуем материалы специально по тематике магазинов на этой платформе.

По всем вопросам и отзывам просьба писать в комментарии ниже.

Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Tatiana Fesenko

    Добрый день! А как мне убрать продукты подкатерогии со страниц категорий. Я не хочу, чтобы продукты дублировались на странице категории, а появлялись только на страницах соответствующей подкатегории.

    Сейчас схема магазина выглядит так:

    Категория 1

    — Подкатегория 1
    — Товар 1
    — Товар 1
    — Товар 2

    А надо:
    Категория 1
    — Подкатегория 1
    — Товар 1
    — Товар 2

    Заранее спасибо!

  • Дмитрий

    Спасибо огромное за статью! Очень помогло!

Scroll To Top