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

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

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

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

Чтобы понять, что товары не исключаются из отложенных заказов, нужно проверить следующий сценарий:

  • Добавьте в корзину товар, который хотите исключить из отложенных заказов.
  • Попробуйте сохранить корзину или добавить товар в отложенные.
  • Убедитесь, что товар действительно сохраняется (отложенный заказ создаётся) — это свидетельствует о том, что WooCommerce не фильтрует такие позиции.

Если вы используете сторонний плагин для отложенных заказов (wishlist, save for later), нужно проверить документацию плагина, поддерживает ли он фильтрацию товаров.

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

В этом примере рассмотрим, как можно запретить добавление товаров с определённым тегом «no-wishlist» в отложенные заказы, используя хук WooCommerce, который отвечает за добавление в корзину или сохранение.

Шаг 1. Добавьте метку (тег) товара

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

Шаг 2. Запретите добавление таких товаров в отложенные

Добавьте следующий код в файл functions.php активной темы или в плагин для кастомных функций:

add_filter('woocommerce_add_to_wishlist_validation', 'exclude_products_from_wishlist', 10, 3);function exclude_products_from_wishlist($valid, $product_id, $user_id) {    $product = wc_get_product($product_id);    if (!$product) {        return $valid;    }    $terms = wp_get_post_terms($product_id, 'product_tag', array('fields' => 'slugs'));    if (in_array('no-wishlist', $terms)) {        wc_add_notice(__('Этот товар нельзя отложить.'), 'error');        return false;    }    return $valid;}

Примечание: фильтр woocommerce_add_to_wishlist_validation

Шаг 3. Проверка работы кода

  • Очистите кеш страниц и браузера.
  • Попробуйте добавить товар с тегом no-wishlist в отложенные.
  • Должно появиться сообщение об ошибке и товар не добавится.
  • Для обычных товаров добавление должно работать.

Альтернативы: плагины и код — сравнительная таблица

МетодПреимуществаНедостатки
Код в functions.phpПрямой контроль, нет дополнительных плагинов, гибкостьНужно учитывать конкретный плагин для отложенных, требует правок при смене плагина
Плагин с фильтрами (например YITH Wishlist)Простота установки, поддержка обновлений, дополнительные функцииМожет не поддерживать нужную фильтрацию, нагрузка на сайт

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

  • Хук не срабатывает: используйте правильный фильтр, соответствующий вашему плагину отложенных заказов. Проверьте документацию плагина.
  • Ошибка отсутствует, но товар добавляется: убедитесь, что тег no-wishlist правильно добавлен и совпадает с тем, что проверяется в коде.
  • Сообщение об ошибке не выводится: используйте wc_add_notice() и убедитесь, что в шаблоне выводятся уведомления WooCommerce.

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

Чтобы убедиться, что решение работает:

  1. Войдите под обычным пользователем.
  2. Перейдите к товару с тегом no-wishlist.
  3. Попробуйте добавить его в отложенные заказов.
  4. Убедитесь, что появляется сообщение об ошибке и товар не добавляется.
  5. Проверьте добавление другого товара без тега — он должен успешно добавиться.

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

  • При добавлении кастомных функций всегда проверяйте, что код не вызывает ошибок PHP, используйте отладку.
  • Кэширование страниц может мешать проверке уведомлений — очищайте кеш при тестировании.
  • Минимизируйте обращение к базе данных, например, кешируйте результаты wp_get_post_terms при необходимости.
  • Если используете сторонние плагины для отложенных заказов, регулярно обновляйте их для безопасности.
Как создать персонализацию контента в WordPress с помощью AJAX и WPBono
16.04.2026
Как создать динамические таблицы в WordPress с помощью шорткода и AJAX
11.03.2026
Как использовать WPCommunity для создания внутренней социальной сети на WordPress
30.03.2026
Как отладить проблемы с кэшированием в WordPress
01.12.2025
Как автоматизировать создание резервных копий в WordPress с помощью Clearfy Pro
18.01.2026