Отобразить связанные категории продуктов по подкатегориям

Вопрос или проблема

Я раньше искал соответствующие статьи, но они не подошли.

В Woocommerce я просто хочу отображать продукты в подкатегории, не показывая продукты в родительской категории, как добавить код в файл function.php, дочерняя тема, не использовать Cross sell, Upsell доступен.

Например, дерево категорий такое: Мобильные> Apple> Iphone Продукт: Iphone 11 Я хочу, чтобы связанные продукты в “Iphone 11” показывали категорию “Iphone”, а не продукты в категориях “Apple” и “Мобильные”.

Пожалуйста, посетите этот URL: https://businessbloomer.com/woocommerce-show-product-subcategories/, возможно, это вам поможет.

Ответ или решение

Для настройки отображения связанных продуктов только по подкатегории в WooCommerce, необходимо внести изменения в файл functions.php вашей дочерней темы. Данная задача подразумевает скрытие продуктов из родительских категорий и показ только тех, которые относятся к выбранной подкатегории. В вашем случае мы хотим, чтобы на странице продукта "Iphone 11" отображались только продукты той же подкатегории "Iphone", а не "Apple" или "Mobile".

Шаги для реализации:

  1. Создание резервной копии: Прежде всего, рекомендуется создать резервную копию вашего сайта и, в частности, файла functions.php, чтобы иметь возможность восстановить предыдущие изменения в случае ошибки.

  2. Редактирование файла functions.php: Откройте файл functions.php вашей дочерней темы. Это можно сделать через панель управления WordPress в разделе "Внешний вид" -> "Редактор".

  3. Добавление кода: Вставьте следующий код в файл functions.php:

    add_filter('woocommerce_related_products', 'custom_related_products_by_subcategory', 10, 2);
    
    function custom_related_products_by_subcategory($related_posts, $product_id) {
       // Получаем объект продукта
       $product = wc_get_product($product_id);
    
       // Получаем ID подкатегории
       $terms = get_the_terms($product_id, 'product_cat');
       $subcategory_ids = [];
    
       if ($terms && !is_wp_error($terms)) {
           foreach ($terms as $term) {
               // Проверяем, является ли категория подкатегорией
               if ($term->parent != 0) {
                   $subcategory_ids[] = $term->term_id;
               }
           }
       }
    
       // Если подкатегории найдены, получаем связанные продукты только из одной подкатегории
       if (!empty($subcategory_ids)) {
           $args = [
               'post_type' => 'product',
               'posts_per_page' => 4, // число отображаемых продуктов
               'post__not_in' => [$product_id],
               'tax_query' => [
                   [
                       'taxonomy' => 'product_cat',
                       'field' => 'term_id',
                       'terms' => $subcategory_ids,
                   ],
               ],
           ];
    
           $related_posts = get_posts($args);
           return wp_list_pluck($related_posts, 'ID');
       }
    
       return $related_posts;
    }

Объяснение кода:

  • Функция: Мы создали функцию, которая фильтрует связанные продукты. Она использует фильтр woocommerce_related_products, чтобы переопределить стандартный набор связанных продуктов.
  • Получение терминов: Мы извлекаем термины (категории) продукта и сохраняем только те, у которых есть родительская категория (то есть это подкатегории).
  • Запрос продуктов: В случае нахождения подкатегорий мы выполняем новый запрос к базе данных для извлечения связанных продуктов только из подкатегории, исключая текущий продукт.
  • Возврат ID продуктов: Наконец, мы возвращаем массив ID товаров, которые следует отобразить на странице.

Заключение:

После реализации изменений, на странице продукта "Iphone 11" появятся только товары из подкатегории "Iphone". Если у вас возникнут любые вопросы или сложности в процессе настройки, не стесняйтесь обращаться к более детальной документации WooCommerce или к специалистам в области разработки на WordPress.

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

Оцените материал
Добавить комментарий

Капча загружается...