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

Проблема: ненужные товары появляются в связанных товарах WooCommerce

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

Диагностика проблемы

Для начала убедитесь, что в карточках товаров действительно есть метаданные, по которым нужно фильтровать. Это можно проверить в админке WooCommerce или с помощью плагина Advanced Custom Fields или любого редактора метаданных.

Затем проверьте, что связанные товары выводятся стандартно и фильтрация по ним не производится. Для этого откройте страницу товара на фронтенде и посмотрите блок «Связанные товары».

Если есть подозрение, что фильтрация не работает, проверьте, не переопределяется ли шаблон related.php в вашей теме.

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

Для решения задачи используем фильтр WooCommerce woocommerce_related_products. Он позволяет изменить массив ID товаров, которые WooCommerce выводит как связанные.

Пример кода для functions.php вашей темы или в отдельном плагине:

add_filter('woocommerce_related_products', 'exclude_related_products_by_meta', 10, 3);
function exclude_related_products_by_meta($related_posts, $product_id, $args) {
    $filtered = [];
    foreach ($related_posts as $related_id) {
        // Получаем значение мета-данных, например 'exclude_from_related'
        $exclude_flag = get_post_meta($related_id, 'exclude_from_related', true);
        // Если флаг не установлен или равен false, добавляем товар в вывод
        if (empty($exclude_flag) || $exclude_flag === 'no') {
            $filtered[] = $related_id;
        }
    }
    return $filtered;
}

В этом примере мы предполагаем, что у товаров, которые нужно исключить, в метаданных exclude_from_related стоит значение "yes". Остальные товары остаются в списке.

Как добавить мета-данные товарам

  • В админке WooCommerce откройте нужный товар.
  • В разделе "Дополнительные поля" или с помощью плагина ACF добавьте поле exclude_from_related с типом "выбор" или "текст".
  • Установите значение yes для товаров, которые хотите исключить.

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

После добавления фильтра:

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

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

  • Фильтр не срабатывает: возможно, другой плагин или тема переопределяет вывод связанных товаров. Проверьте шаблон related.php в теме.
  • Неправильное имя мета-ключа: убедитесь, что используете корректный ключ мета-данных.
  • Кэширование: кэш может показывать устаревшие данные. Очистите серверный и плагин-кэш.
  • Ошибка в коде: проверьте синтаксис PHP, особенно при копировании кода.

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

  • Используйте правильные типы данных в мета-полях — лучше булево или строковое «yes/no», чтобы упростить проверку.
  • Не выполняйте лишних запросов к базе данных — в фильтре используйте get_post_meta с параметром true для одиночного значения.
  • Если сайт большой, кешируйте результаты фильтрации, чтобы не делать повторные запросы.
  • Всегда тестируйте код на staging-среде перед внедрением в продакшн.

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

ПодходОписаниеПлюсыМинусы
Фильтр woocommerce_related_products Изменение массива ID связанных товаров через PHP-фильтр Простота реализации, гибкость, отсутствие вмешательства в шаблоны Не влияет на SQL-запрос, потенциально не оптимально на больших сайтах
Переопределение шаблона related.php Полный контроль над выводом связанных товаров Максимальная кастомизация Требует знания PHP и шаблонной структуры WooCommerce, сложнее поддерживать
Плагины для кастомизации связанных товаров Готовые решения с UI Удобство, не требует кода Может влиять на производительность, ограничена кастомизация

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

⭐⭐⭐⭐⭐
WooCommerce: как исключить товары по метаданным из списка связанных товаров
07.05.2026
WooCommerce: как исключить товары по метаданным из списка связанных товаров
10.05.2026
Оптимизация обработки данных в YARPP для крупных сайтов на WordPress
28.02.2026
Автозаполнение ссылок в связанных записях YARPP: практическое руководство
04.01.2026
YARPP не работает после обновления WordPress: как исправить проблему
06.12.2025
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙