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

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

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

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

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

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

Например, у нас есть метаполе _exclude_from_related с значением yes, обозначающее, что товар нужно исключить из связанных.

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

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

add_filter('woocommerce_related_products', 'exclude_related_products_by_meta', 10, 3);
function exclude_related_products_by_meta($related_posts, $product_id, $args) {
    // Получаем ID товаров, которые нужно исключить
    $excluded = get_posts(array(
        'post_type' => 'product',
        'fields' => 'ids',
        'meta_key' => '_exclude_from_related',
        'meta_value' => 'yes',
        'posts_per_page' => -1,
    ));

    if (empty($excluded)) {
        return $related_posts;
    }

    // Отфильтровываем связанные товары
    $filtered = array_diff($related_posts, $excluded);

    // Если после фильтрации список пуст, возвращаем оригинальный (чтобы не показывать пустой блок)
    return !empty($filtered) ? $filtered : $related_posts;
}

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

Для проверки создайте или отредактируйте товар в админке WooCommerce, добавьте пользовательское поле _exclude_from_related со значением yes.

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

  • Откройте страницу товара, для которого выводятся связанные товары.
  • Убедитесь, что товары с метаполем _exclude_from_related = yes не отображаются в блоке связанных товаров.
  • Если они по-прежнему отображаются, проверьте, правильно ли добавлено метаполе и активен ли фильтр.

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

  • Метаполе не добавлено к товарам: Проверьте через базу данных или плагин типа Advanced Custom Fields, что метаполе _exclude_from_related присутствует.
  • Кэширование мешает видеть изменения: Очистите кэш сайта и браузера, особенно если используется кеширование WooCommerce или плагинов.
  • Другие плагины переопределяют связанные товары: Временно деактивируйте сторонние плагины, чтобы выявить конфликт.
  • Фильтр применён с неправильным приоритетом или параметрами: Убедитесь, что фильтр добавлен с приоритетом 10 и получает все 3 параметра.

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

  • В запросе по метаданным используйте 'fields' => 'ids' для выборки только ID, чтобы снизить нагрузку на базу данных.
  • Если товаров очень много, кешируйте результат get_posts в transient с разумным сроком, чтобы не выполнять лишние запросы при каждом вызове.
  • Проверяйте права доступа, если метаполе добавляется через пользовательский интерфейс, чтобы не допустить изменение данных неавторизованными пользователями.

Сравнение подходов: плагин vs кастомный код

МетодПлюсыМинусыКомпромисс
Плагин для управления связанными товарамиБыстрая настройка, UI для исключенияМожет замедлять сайт, ограниченная кастомизацияИспользовать для небольших магазинов без сложных условий
Кастомный фильтр на основе метаданныхМаксимальная гибкость, минимальный код, высокая производительностьТребует навыков разработки, поддержка ложится на разработчикаОптимален для средних и больших магазинов с уникальными требованиями

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

⭐⭐⭐⭐⭐
Как добавить автоматическое открытие и закрытие аккордеона в WordPress
14.03.2026
Как автоматизировать создание связанных записей по ключевым словам в WordPress
09.04.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
06.06.2026
Как вывести связанные записи по произвольным полям (meta) в WordPress
08.04.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
09.06.2026
×
WordPress
дай сайту суперсилу!

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

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