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

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

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

Если не исключать такие товары, пользователь увидит нерелевантные или неактуальные предложения, что ухудшит UX и может снизить конверсию.

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

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

Для примера предположим, что у товаров есть мета-поле _exclude_from_related со значением yes, которое маркирует товары для исключения.

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

В WooCommerce для изменения запроса связанных товаров используется фильтр woocommerce_related_products. Он позволяет заменить массив ID связанных товаров.

Пример кода, который исключает товары с мета-полем _exclude_from_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_posts = [];
    foreach ($related_posts as $related_id) {
        $exclude = get_post_meta($related_id, '_exclude_from_related', true);
        if ($exclude !== 'yes') {
            $filtered_posts[] = $related_id;
        }
    }

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

3. Разместите код в functions.php или в кастомном плагине

Лучше всего добавить этот код в дочернюю тему в functions.php или создать небольшой плагин, чтобы сохранить изменения при обновлении темы.

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

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

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

  • Ничего не меняется после добавления кода
    — Проверьте, что фильтр правильно подключен и код без синтаксических ошибок.
    — Убедитесь, что мета-поле действительно существует у товаров и записано корректно.
  • Пустой блок связанных товаров
    — Если после фильтрации нет связанных товаров, код возвращает оригинальный массив. Если не хотите показывать ничего, можно изменить поведение в коде.
  • Кэширование мешает видеть изменения
    — Очистите кэш браузера, кэш плагинов и серверный кэш (например, Redis, Varnish).
  • Код размещён в неподходящем месте
    — Проверьте, что код добавлен в активную тему или плагин и выполняется на фронтенде.

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

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

Сравнение способов исключения товаров из связанных товаров в WooCommerce

МетодГде реализуетсяПлюсыМинусы
Фильтр woocommerce_related_products с проверкой метаданных functions.php или плагин Простой, гибкий, не требует изменения ядра Зависит от правильного заполнения мета-полей
Изменение SQL запроса через posts_clauses functions.php или плагин Гибкий контроль, можно фильтровать по сложным условиям Сложнее в поддержке, возможны ошибки в SQL
Использование сторонних плагинов для управления связанными товарами Плагин Готовые решения, интерфейс управления Может влиять на производительность, лишние зависимости

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

⭐⭐⭐⭐⭐
Как создать свой плагин для автоматического создания связанных записей в WordPress
18.11.2025
Как эффективно использовать YARPP с AJAX: динамическая подгрузка связанных записей в WordPress
12.04.2026
Как избежать конфликтов между YARPP и WooCommerce при подборе связанных товаров
27.04.2026
Как автоматизировать создание связанных записей по автору в WordPress
04.03.2026
Как создать автоматический спутник раздел в WordPress с помощью кода
25.12.2025
×
WordPress
дай сайту суперсилу!

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

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