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

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

В стандартной настройке WooCommerce связанные товары подбираются на основе категорий и тегов, но это не всегда подходит для крупных каталогов с разным ассортиментом. Иногда нужно исключить из блока связанных товары с определёнными метаданными (например, неактуальные, с особым статусом или промо-продукты), чтобы не сбивать пользователя и избежать снижения конверсии.

Чаще всего проблема проявляется так:

  • В блоке связанных товаров появляются товары со статусом "скоро в продаже" или "архив", которые не должны показываться.
  • Промо-товары, которые показываются только на главной или в специальных разделах, появляются везде, в том числе в связанных.
  • Появляются дубликаты или товары, которые по бизнес-логике нельзя рекомендовать вместе.

Как проверить, что WooCommerce выводит связанные товары без фильтрации по метаданным

Откройте страницу товара, прокрутите до блока связанных товаров. Если вы не применяли кастомные фильтры, то WooCommerce показывает товары на основе категорий и тегов. Чтобы проверить метаданные, используйте get_post_meta() для связанного товара и убедитесь, что условие исключения не работает.

Пример запроса метаданных в консоли:

console.log(wp.data.select('core/editor').getCurrentPost());

Или в PHP можете временно вывести метаданные таких товаров в шаблоне:

foreach ( $related_products as $product_id ) {
  echo 'Meta: ' . get_post_meta( $product_id, '_your_meta_key', true );
}

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

1. Подключаем фильтр для изменения запроса связанных товаров

WooCommerce позволяет использовать фильтр woocommerce_related_products для изменения массива ID связанных товаров перед выводом. Мы будем исключать товары по метаданным, проверяя каждое значение.

2. Добавляем функцию для фильтра, которая проверяет мета и исключает товары

add_filter('woocommerce_related_products', 'exclude_products_by_meta_from_related', 10, 3);
function exclude_products_by_meta_from_related($related_posts, $product_id, $args) {
    $filtered = [];
    foreach ($related_posts as $related_id) {
        $exclude_flag = get_post_meta($related_id, '_exclude_from_related', true);
        if (empty($exclude_flag)) {
            $filtered[] = $related_id;
        }
    }
    return $filtered;
}

В этом примере товары с метаполем _exclude_from_related (например, со значением 'yes') не будут показаны в блоке связанных.

3. Добавляем метаполе товарам, которые нужно исключить

Через админку WooCommerce или с помощью функции добавьте метаполе _exclude_from_related со значением 'yes' тем товарам, которые не должны показываться. Например, через плагин Advanced Custom Fields или напрямую через базу.

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

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

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

  • Фильтр не срабатывает: Убедитесь, что хук woocommerce_related_products подключён правильно и функция подключена в файле functions.php или плагине, активном на сайте.
  • Метаполе не добавлено или не верно указано: Проверьте наличие метаполя у товаров через phpMyAdmin или в админке. Название мета ключа должно совпадать с кодом.
  • Кэширование: Если на сайте включено кэширование (например, через WP Rocket, LiteSpeed), очистите кэш после внесения изменений.
  • Кэш связанных товаров WooCommerce: WooCommerce кэширует связанные товары в транзиенты, сбросьте их с помощью плагина Clearfy Pro или вручную через базу.

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

  • Для повышения производительности не используйте тяжелые запросы внутри цикла. Метаполя проверяйте заранее, если это возможно.
  • Используйте WP_Query с параметром meta_query, если планируете более сложную логику исключений, но будьте осторожны с нагрузкой на базу.
  • Для массового обновления метаданных используйте WP-CLI команды или SQL-запросы, чтобы избежать ручного труда.
  • Если на сайте много товаров, рассмотрите использование Object Cache (Redis, Memcached) для ускорения выборок.

Сравнение методов исключения товаров из связанных

МетодПлюсыМинусы
Фильтр woocommerce_related_productsПростой, не требует сложных запросов, легко реализуемНе масштабируется для очень больших каталого, требуется дополнительная логика для специфичных условий
Использование pre_get_posts с meta_queryГибкое управление запросом, можно построить сложные условияПовышенная нагрузка на базу, требует оптимизации и индексации мета-полей
Плагины для управления связанными товарамиГотовые решения с интерфейсом, поддержка и обновленияМожет влиять на производительность, часто избыточны для простых задач

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

⭐⭐⭐⭐⭐
Как создать функционал автозаполнения форм в WordPress: пошаговое руководство
29.11.2025
WooCommerce: как автоматически исключать товары из связанных по метаданным
21.06.2026
Как создать кастомные шаблоны связанных записей в WordPress
22.12.2025
WooCommerce: как автоматически исключать распроданные товары из связанных товаров
07.07.2026
Как создать автоматические связи между записями по тегам в WordPress
07.02.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее