Диагностика проблемы: почему нужно исключать товары из связанных
В интернет-магазине на 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, нужно тестировать | Опытные разработчики, кастомные решения |
| Плагин фильтрации связанных товаров | Быстрое внедрение, интерфейс настройки | Может замедлить сайт, зависимость от обновлений плагина | Новички, сайты без разработчиков |