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

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

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

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

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

1. Добавляем фильтр для изменения аргументов запроса связанных товаров

Для исключения товаров по метаданным используем фильтр woocommerce_related_products_args. Он позволяет модифицировать параметры WP_Query, который получает связанные товары.

add_filter('woocommerce_related_products_args', 'exclude_related_products_by_meta', 10, 1);
function exclude_related_products_by_meta($args) {
    // Исключаем товары с мета ключом '_exclude_related' и значением 'yes'
    $meta_query = array(
        array(
            'key'     => '_exclude_related',
            'value'   => 'yes',
            'compare' => '!=',
        ),
    );

    if ( isset($args['meta_query']) ) {
        $args['meta_query'][] = $meta_query[0];
    } else {
        $args['meta_query'] = $meta_query;
    }

    return $args;
}

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

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

update_post_meta($product_id, '_exclude_related', 'yes');

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

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

  • Откройте страницу товара, у которого в связанных товарах раньше появлялись исключаемые товары.
  • Проверьте, что товары с метаданными _exclude_related = yes не отображаются в блоке связанных товаров.
  • Очистите кеш сайта и браузера, если вывод кэшируется.

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

  • Метаданные не добавлены или неверно заданы: убедитесь, что для исключаемых товаров действительно установлен мета-ключ _exclude_related со значением yes.
  • Кеширование мешает увидеть изменения: почистите кеш плагинов (например, WP Rocket, W3 Total Cache) и браузера.
  • Фильтр применяется, но связанные товары не изменились: возможно, тема или плагин переопределяют логику вывода связанных товаров. Проверьте, не фильтруется ли woocommerce_related_products_args в других местах.
  • Ошибка в синтаксисе кода: внимательно проверьте код на наличие синтаксических ошибок, используйте WP_DEBUG для отладки.

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

  • Добавляйте метаданные только для тех товаров, которые действительно нужно исключить — избыточное использование meta_query может замедлить запросы к базе.
  • Не используйте слишком сложные мета-запросы — для большого каталога товаров лучше реализовать кэширование результатов или использовать transient API.
  • Размещайте код в дочерней теме или в плагине, чтобы избежать потери изменений при обновлении WooCommerce или темы.
  • Обязательно проверяйте права доступа при добавлении метаданных программно, чтобы избежать ошибок безопасности.

Сравнение вариантов решения

МетодПреимуществаНедостаткиРекомендуется для
Фильтр woocommerce_related_products_args с meta_query Гибко, напрямую интегрируется в запрос, не требует сторонних плагинов Может замедлить запросы при большом количестве товаров с метаданными Средние и крупные магазины с контролируемым объемом
Плагин для управления связями товаров Удобный интерфейс, дополнительные функции Может конфликтовать с темой или другими плагинами, нагрузка на сайт Малые магазины без разработки
Жёсткое исключение через JS (скрытие элементов) Быстрое исправление без изменения PHP Неэффективно, товары грузятся на страницу, ухудшает SEO Кратковременная мера

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

⭐⭐⭐⭐⭐
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры
02.12.2025
WooCommerce: как исключить товары по метаданным из списка связанных товаров
04.05.2026
Вывод связанных записей по автору с помощью кода в WordPress
23.03.2026
Использование YarnN для улучшения автоподбора связанных записей в WordPress
19.12.2025
YARPP не работает после обновления WordPress: как исправить проблему
06.12.2025
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙