Вопрос или проблема
Я раньше искал соответствующие статьи, но они не подошли.
В 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".
Шаги для реализации:
-
Создание резервной копии: Прежде всего, рекомендуется создать резервную копию вашего сайта и, в частности, файла functions.php, чтобы иметь возможность восстановить предыдущие изменения в случае ошибки.
-
Редактирование файла functions.php: Откройте файл functions.php вашей дочерней темы. Это можно сделать через панель управления WordPress в разделе "Внешний вид" -> "Редактор".
-
Добавление кода: Вставьте следующий код в файл 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.
Таким образом, вы сможете улучшить опыт пользователей вашего интернет-магазина, предоставляя им более релевантные предложения.