Разделение подкатегорий и товаров на страницах категорий WooCommerce

Здравствуйте, друзья!

Сегодня я хочу поделиться с вами небольшим, но полезным кодом для вашего магазина на WooCommerce. Данный код позволяет отображать подкатегории вместе с количеством товаров в них над списком товаров на странице категории. Таким образом, пользователи смогут увидеть подкатегории в самом начале и посетить их, не прокручивая через все товары.

Итак вступление:
WooCommerce — один из самых популярных плагинов для интернет-магазинов на платформе WordPress, предоставляющий гибкие возможности по настройке и управлению магазинами. Однако иногда возникает необходимость дополнительной кастомизации отображения элементов на сайте. В этой статье я покажу вам, как разделить подкатегории и товары на странице категории.

История кода началась, когда клиенту сайта на WordPress + WooCommerce потребовалось отображать на страницах категорий не только товары, но и дочерние категории. В настройках WooCommerce есть такая возможность и клиент естественно ей воспользовался и какого его было удивление, когда категории были смешаны с товарами, т.е. шли сначала категории, кстати у него были они без изображений, а затем следом, без переноса или какого-то явного разделения шли товары. Конечно ему это не понравилось. Так вот как убрать изображения для категорий — это отдельная тема, решается быстро. А с второй задачей, а именно разделить подкатегории и товары на странице категории.

В интернете есть решения, но они требуют изменения шаблона WooCommerce или изменения темы. Но хотелось отойти от таких изменений, т.к. WooCommerce может обновить свои шаблоны и нужно постоянно отслеживать какие-то новшества, совместимость, и тема была тоже обновляемая, что могло переписать при обновлении код. В общем я оформил в виде плагина, чтобы владелец мог в случае чего отключить изменения. Для вас же представлю код, который нужно вставить в functioins.php вашей темы (как сделать плагин, найдите статью на этом сайте или в интернете).

Вот сам код:

// Показать подкатегории вверху страницы категории раздельно от товаров
// Разделяем товары от подкатегорий
add_action( 'woocommerce_before_shop_loop', 'wplife_show_category_subcategories', 10 );
function wplife_show_category_subcategories() {
  $show_categories = get_option('woocommerce_category_archive_display');

  if (!$show_categories == 'both') { // Режим показа категорий и товаров отключен
    // проверяем, находимся ли мы на странице категории Woo
    if ( is_product_category() ) {
      // получаем текущую категорию
      $current_category = get_queried_object();
      // проверяем, есть ли у текущей категории подкатегории
      $subcategories = get_terms( array(
        'taxonomy' => 'product_cat',
        'parent' => $current_category->term_id,
        'hide_empty' => true,
      ) );
      if ( $subcategories ) {
        echo '<ul class="products">';
        foreach ( $subcategories as $subcategory ) {
          // Получаем количество товаров в подкатегории
          $subcategory_info = get_term($subcategory->term_id, 'product_cat');
          $product_count = $subcategory_info->count;
          $count_text = _n( '%s product', '%s products', $product_count, 'woocommerce' );
          echo '<li class="product-category product"><a href="'.get_term_link($subcategory).'"><h2 class="woocommerce-loop-category__title">'.$subcategory->name.' <mark class="count">'.sprintf($count_text, $product_count).'</mark></h2></a></li>';
        }
        echo '</ul>';
      }
    }
  }
}

Итак, давайте разберемся, как это работает.

add_action( 'woocommerce_before_shop_loop', 'wplife_show_category_subcategories', 10 );

Здесь мы добавляем действие woocommerce_before_shop_loop, которое позволяет нам вставить наш код перед началом вывода списка товаров в магазине. Функция wplife_show_category_subcategories будет вызвана, и ей передается приоритет 10.

function wplife_show_category_subcategories() {
  $show_categories = get_option('woocommerce_category_archive_display');

Внутри функции мы получаем текущую настройку отображения подкатегорий и товаров.

if (!$show_categories == 'both') { // Режим показа категорий и товаров отключен

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

if ( is_product_category() ) {

Теперь мы проверяем, находимся ли мы на странице одной из категорий товаров WooCommerce.

  $current_category = get_queried_object();

Здесь мы получаем данные текущей категории.

  $subcategories = get_terms( array(
    'taxonomy' => 'product_cat',
    'parent' => $current_category->term_id,
    'hide_empty' => true,
  ) );

Получаем массив подкатегорий, принадлежащих текущей категории.

  if ( $subcategories ) {

Если подкатегории существуют, код продолжит выполнение.

    echo '<ul class="products">';

Создаем блок со списком элементов.

    foreach ( $subcategories as $subcategory ) {
      // Получаем количество товаров в подкатегории
      $subcategory_info = get_term($subcategory->term_id, 'product_cat');
      $product_count = $subcategory_info->count;
      $count_text = _n( '%s product', '%s products', $product_count, 'woocommerce' );

Здесь мы проходимся по каждой подкатегории, получаем информацию о ней, количество товаров и подготовливаем текст с числом товаров, используя функцию WooCommerce _n().

          echo '<li class="product-category product"><a href="'.get_term_link($subcategory).'"><h2 class="woocommerce-loop-category__title">'.$subcategory->name.' <mark class="count">'.sprintf($count_text, $product_count).'</mark></h2></a></li>';

Выводим ссылку на подкатегорию с названием и количеством товаров в ней.

        }
        echo '</ul>';
      }
    }
  }
}

Закрываем блок и функцию.

Теперь вы знаете, как добавить код для отображения подкатегорий на странице категории товаров в вашем магазине на WooCommerce с количеством товаров в них. Надеюсь, что эта статья была полезной для вас.

Код будет работать, если в настройках WooCommerce для отображения категорий, вы выберете «отображать категории и товары». Классы я постарался сохранить стандартные от WooCommerce. Тестировал на теме Astra.

Всего доброго и удачных продаж!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх