WooCommerce: как исключить товары по метаданным из списка связанных товаров

Диагностика проблемы: почему нужно исключать товары из связанных товаров WooCommerce

По умолчанию WooCommerce выводит связанные товары (upsells, cross-sells, related products) на основе категорий и тегов. Однако иногда требуется исключить из этих списков определённые товары, например, товары, которые сняты с продажи, товары с определённым статусом или с кастомным метаполем. Без корректной фильтрации пользователь увидит нерелевантные или запрещённые к показу товары, что ухудшит UX и конверсию.

Пошаговое решение: исключение товаров по метаданным из списка связанных товаров

1. Определяем метаполе для исключения

Для примера возьмём метаполе exclude_from_related со значением yes. Все товары с этим метаполем не должны появляться в списках связанных товаров.

2. Используем фильтр woocommerce_related_products для исключения товаров

Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:

add_filter('woocommerce_related_products', 'exclude_products_from_related_by_meta', 10, 3);
function exclude_products_from_related_by_meta($related_posts, $product_id, $args) {
    if (empty($related_posts)) {
        return $related_posts;
    }

    $filtered_posts = array();
    foreach ($related_posts as $related_id) {
        $exclude = get_post_meta($related_id, 'exclude_from_related', true);
        if ($exclude !== 'yes') {
            $filtered_posts[] = $related_id;
        }
    }

    return $filtered_posts;
}

3. Проверяем набор связанных товаров

После добавления фильтра зайдите на страницу товара во фронтенде и убедитесь, что товары с метаполем exclude_from_related = yes не отображаются в блоке связанных товаров.

Как проверить, что решение сработало

  • Создайте тестовый товар с метаполем exclude_from_related = yes (через админку или плагин для метаполей).
  • Откройте страницу другого товара, который обычно показывает этот тестовый товар в связанных.
  • Убедитесь, что тестовый товар не отображается среди связанных, остальные товары видны.
  • Для контроля можно временно вывести ID связанных товаров через фильтр и проверить массив.

Частые ошибки и как исправить

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

Практические советы для улучшения производительности и безопасности

  • Для больших каталогов добавьте индексацию по метаполям в базе, чтобы ускорить выборку.
  • Используйте трансзиенты для кеширования результата фильтрации, если блок связанных товаров вызывается часто.
  • Обязательно проверяйте права доступа и избегайте вывода метаданных в публичных местах.

Альтернативные варианты решения

МетодОписаниеПлюсыМинусы
Фильтр woocommerce_related_productsИсключение по ID после получения набора связанных товаров.Простой, работает с нативным функционалом WooCommerce, гибкий.Может влиять на производительность при большом количестве товаров.
Переопределение SQL запроса по связямИзменение SQL запроса, который формирует связанные товары.Более эффективное исключение на уровне БД.Сложнее реализовать, требуется понимание WP_Query и WooCommerce SQL.
Использование плагинов для управления связямиПлагины с UI для настройки исключений.Удобно для админов без кода.Могут быть избыточными, замедлять сайт.

Заключение

Исключение товаров из связанных по метаданным — частая задача при гибкой настройке WooCommerce. Использование фильтра woocommerce_related_products с проверкой метаполей — надёжный и проверенный способ. Важно тестировать на реальных данных, учитывать кэширование и взаимодействие с другими плагинами. Для более сложных сценариев можно рассмотреть изменение SQL-запросов или специализированные плагины.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как избежать конфликтов между YARPP и WooCommerce при подборе связанных товаров
27.04.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
06.06.2026
Как создать собственный фильтр для YARPP в WordPress: практическое руководство
30.01.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
23.05.2026
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры
02.12.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее