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

Проблема: нежелательные товары в блоке связанных товаров WooCommerce

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

Диагностика проблемы

Для начала нужно проверить, какие товары появляются в блоке связанных товаров, и есть ли среди них нежелательные позиции с определенными мета-полями. Это можно сделать через браузер и инструменты разработчика (DevTools):

  • Откройте страницу товара с блоком связанных товаров.
  • Определите ID товаров, которые должны быть исключены.
  • Проверьте в базе данных или через WP-админ панель, какие мета-данные у них установлены (используйте плагин Advanced Custom Fields или напрямую запросы к базе).

Если такие метаданные присутствуют (например, _exclude_related со значением yes), значит есть возможность фильтровать вывод по ним.

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

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

Пример кода для исключения товаров с мета-ключом _exclude_related и значением yes:

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

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

    return $filtered;
}

Добавьте этот код в файл functions.php активной темы или в кастомный плагин.

Объяснение работы кода

  • Получаем текущий массив ID связанных товаров.
  • Итерируем по каждому ID и проверяем мета-данные.
  • Если мета-данные не указывают на исключение, оставляем товар.
  • Возвращаем отфильтрованный список для вывода.

Проверка результата

Чтобы убедиться, что товары успешно исключены:

  • Откройте страницу товара, где раньше показывался товар с мета _exclude_related = yes.
  • Проверьте блок связанных товаров — исключённый товар не должен отображаться.
  • Откройте исходный код страницы и найдите блок связанных товаров — убедитесь, что ID исключенных товаров отсутствуют.
  • Для отладки можно временно добавить error_log(print_r($filtered, true)); в функцию, чтобы видеть результат в логах.

Частые ошибки и их исправление

  • Ошибка: Фильтр не работает, и нежелательные товары продолжают показываться.
    Причина: Возможно, кэширование страницы или объекта перекрывает изменения.
    Решение: Очистите кэш плагинов (например, WP Rocket, W3 Total Cache) и серверный кэш, отключите кэширование во время тестирования.
  • Ошибка: Все связанные товары исчезли.
    Причина: Все товары имеют мета _exclude_related = yes или неверная логика фильтра.
    Решение: Проверьте мета-данные товаров, убедитесь, что есть хотя бы несколько товаров без мета или со значением отличным от yes.
  • Ошибка: Функция добавлена в плагин, но не работает.
    Причина: Приоритет хуков или подключение кода происходит слишком рано или поздно.
    Решение: Убедитесь, что код подключается после загрузки WooCommerce, например, через хук plugins_loaded или в functions.php темы.

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

  • Избегайте частых запросов get_post_meta на больших массивах — кешируйте результаты, если планируете расширять функционал.
  • Не используйте тяжелые запросы в хуках, отвечающих за фронтенд, чтобы не замедлять загрузку страниц.
  • Проверяйте права доступа при работе с метаданными, чтобы не раскрыть конфиденциальные данные.
  • Если блок связанных товаров выводится через AJAX, убедитесь, что фильтр применяется и там, возможно, потребуется аналогичный фильтр для AJAX-запросов.

Альтернативные методы: плагин vs код

МетодПлюсыМинусы
Код в functions.phpГибкость, полностью под контролем, без зависимостейТребует навыков программирования, риск ошибок
Плагин фильтрации товаров (например, Custom Related Products)Простота настройки, интерфейс для управленияМожет замедлять сайт, возможно платный функционал

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

⭐⭐⭐⭐⭐
WooCommerce: как автоматически исключать распроданные товары из связанных товаров
07.07.2026
Автозаполнение ссылок в связанных записях YARPP: практическое руководство
04.01.2026
Как создать автоматические связи между записями по тегам в WordPress
07.02.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
06.06.2026
Как автоматизировать создание категорий в WordPress по шаблону с помощью кода и плагинов
25.02.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее