WooCommerce: как исключить товар из каталога без удаления

Диагностика: зачем исключать товар из каталога, но не удалять его

Иногда в WooCommerce возникает задача временно скрыть товар из каталога и поиска, чтобы он не отображался покупателям, но при этом сохранить все данные и возможность быстро вернуть товар в продажу. Простое удаление товара или перевод в черновик не всегда подходит — требуется именно исключение из видимости без потери информации и истории заказов.

Как понять, что товар исключён из каталога

  • Витрина и страницы категории не показывают товар;
  • Поиск по сайту не возвращает этот товар;
  • Товар доступен по прямой ссылке (если нужно);
  • Товар продолжает отображаться в админке WooCommerce;
  • Заказы с этим товаром в истории сохраняются.

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

Используем стандартный метаполе _visibility, но с современным подходом через фильтр woocommerce_product_is_visible и дополнительные проверки. Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

function wpmax_exclude_product_from_catalog( $visible, $product_id ) {
    // ID товара, который нужно исключить
    $excluded_ids = array(123, 456); // замените на нужные ID

    if ( in_array( $product_id, $excluded_ids ) ) {
        return false; // товар не виден в каталоге и поиске
    }
    return $visible;
}
add_filter( 'woocommerce_product_is_visible', 'wpmax_exclude_product_from_catalog', 10, 2 );

Для более гибкого управления можно использовать метаполе товара, например _exclude_from_catalog (значение 'yes'). Тогда проверка будет такой:

function wpmax_exclude_product_from_catalog_meta( $visible, $product_id ) {
    $exclude = get_post_meta( $product_id, '_exclude_from_catalog', true );
    if ( 'yes' === $exclude ) {
        return false;
    }
    return $visible;
}
add_filter( 'woocommerce_product_is_visible', 'wpmax_exclude_product_from_catalog_meta', 10, 2 );

Как добавить метаполе в админку продукта

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

function wpmax_add_exclude_checkbox() {
    woocommerce_wp_checkbox( array( 
        'id' => '_exclude_from_catalog',
        'label' => __('Исключить из каталога и поиска', 'woocommerce'),
        'description' => __('Если отмечено, товар не будет показываться в каталоге и поиске', 'woocommerce'),
    ) );
}
add_action( 'woocommerce_product_options_general_product_data', 'wpmax_add_exclude_checkbox' );

function wpmax_save_exclude_checkbox( $post_id ) {
    $exclude = isset( $_POST['_exclude_from_catalog'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_exclude_from_catalog', $exclude );
}
add_action( 'woocommerce_process_product_meta', 'wpmax_save_exclude_checkbox' );

Проверка результата

  1. Перейдите в админку товара и отметьте чекбокс «Исключить из каталога и поиска». Сохраните товар.
  2. Очистите кеш сайта и браузера.
  3. Проверьте страницу категории — товар должен исчезнуть из списка.
  4. Проверьте поиск по сайту — товар не должен отображаться.
  5. Перейдите по прямой ссылке товара — он должен быть доступен (если это нужно). Если хотите скрыть и прямую ссылку, дополнительно отключайте доступ через template_redirect.

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

  • Товар всё ещё отображается в каталоге: возможно, включен кэш плагина или сервера — очистите все уровни кеша.
  • Чекбокс не сохраняется: проверьте, что функция сохранения подключена и нет конфликтов с другими плагинами.
  • Товар виден в поиске, но не в каталоге: фильтр woocommerce_product_is_visible влияет и на поиск, но если используется кастомный поиск, проверьте его настройки.
  • Товар недоступен по прямой ссылке, но нужно чтобы был: код дополнительно ограничивает доступ — уберите фильтр template_redirect или настройте разрешения.

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

  • Не храните длинные списки ID товаров для исключения в коде, используйте метаполя или таксономии.
  • Для больших магазинов создайте отдельный метаповод или пользовательское поле с индексом, чтобы быстро фильтровать товары на уровне запросов.
  • При использовании кеширующих плагинов убедитесь, что страницы с исключёнными товарами корректно обновляются.
  • Не удаляйте товары, если на них есть заказы — лучше скрывайте их, чтобы не потерять историю.

Сравнительная таблица способов исключения товаров из каталога

МетодПлюсыМинусыПрименимость
Удаление товараПростота, освобождение местаПотеря истории, невозможность быстрого возвратаРедкие случаи, когда товар больше не нужен
Перевод в черновикЛегко вернуть, скрывает из каталогаТовар может быть виден в некоторых темах и плагинахПодходит для временного скрытия
Код с фильтром woocommerce_product_is_visibleГибко, не влияет на базу данныхТребует навыков программированияЛучший для точного контроля
Использование метаполя и чекбоксаУдобно для админов, гибкоНужно добавить код и валидациюОптимально для магазинов средней и большой сложности
Как разделить контент на страницах WordPress по условиям
02.02.2026
Как изменить файл robots.txt в WordPress без плагинов: практическое руководство
28.03.2026
Как создать уникальные метаданные для каждого типа записей WordPress
16.01.2026
WooCommerce: как исключить товар из поиска и каталога без удаления
28.05.2026
Как создать автозаполняемое поле в WordPress с помощью JS и AJAX
23.12.2025