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

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

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

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

1. Определяем мета-ключ и значение для фильтрации

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

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

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

3. Добавляем код в файл functions.php вашей темы или дочерней темы

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) {
    // Получаем ID товаров для исключения
    $excluded = [];
    foreach ($related_posts as $related_id) {
        $exclude = get_post_meta($related_id, 'exclude_from_related', true);
        if ($exclude === 'yes') {
            $excluded[] = $related_id;
        }
    }
    // Возвращаем только те товары, которых нет в списке исключений
    return array_diff($related_posts, $excluded);
}

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

1. Убедитесь, что у некоторых товаров есть мета-ключ exclude_from_related со значением yes (можно добавить через админку или с помощью плагина Advanced Custom Fields).

2. Откройте страницу товара, у которого в связанных есть товары с таким мета-ключом.

3. Проверьте, что товары с exclude_from_related = yes не отображаются в блоке связанных товаров.

4. При необходимости очистите кэш WooCommerce и браузера.

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

  • Ошибка: Товары не исключаются из списка.
    Причина: Неправильно задан мета-ключ или значение. Проверьте через базу данных или инструменты редактирования метаданных.
  • Ошибка: Код добавлен, но связанных товаров вообще нет.
    Причина: Возможно, после фильтрации список пуст. Добавьте проверку и fallback, чтобы показать альтернативные товары.
  • Ошибка: Кэширование мешает обновлениям.
    Решение: Очистите кэш плагинов и браузера.

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

  • Избегайте тяжелых запросов в цикле. В нашем коде получаем мета по конкретным ID, что достаточно эффективно.
  • Для крупных магазинов с тысячами товаров лучше кэшировать результаты фильтрации или использовать transient API.
  • Не используйте прямые SQL-запросы без необходимости – WordPress API более безопасен.
  • Для управления метаданными используйте проверенные плагины (например, Advanced Custom Fields) или собственные поля с валидацией.

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

МетодПреимуществаНедостаткиПодходит для
Ручной код в functions.phpПолный контроль, легковесность, гибкостьТребует навыков PHP, нужно тестироватьОпытные разработчики, кастомные решения
Плагин фильтрации связанных товаровБыстрое внедрение, интерфейс настройкиМожет замедлить сайт, зависимость от обновлений плагинаНовички, сайты без разработчиков

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

⭐⭐⭐⭐⭐
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры
02.12.2025
Как добавить автоматическое открытие и закрытие аккордеона в WordPress
14.03.2026
Как избежать конфликтов между YARPP и WooCommerce при подборе связанных товаров
27.04.2026
YARPP и пагинация: как правильно настроить вывод связанных записей с разбивкой на страницы
30.12.2025
Как эффективно использовать YARPP для подбора связанных записей по произвольным методам
15.04.2026
×
WordPress
дай сайту суперсилу!

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

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