wpurok.ru wordpress WPUrok

Как отключить отображение товаров в каталоге WooCommerce

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

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

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

Часто пользователи пытаются использовать опцию «Скрыть из каталога» в настройках видимости товара, которая по умолчанию отсутствует в WooCommerce. Альтернативно применяют статус «Черновик» или «Личное», но это скрывает товар полностью и он недоступен по прямой ссылке.

Нужно проверить, действительно ли товары отображаются в каталоге, несмотря на попытки скрыть их, и понять, как WooCommerce формирует запросы к базе для вывода каталога.

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

1. Добавление пользовательского поля для маркировки скрытия

Воспользуемся пользовательским полем (мета-данными) для товаров, которое будем использовать для скрытия из каталога. Добавим мета-поле hide_from_catalog с значением yes.

2. Фильтрация запроса каталога WooCommerce

Добавим фильтр к основному запросу WooCommerce, чтобы исключить товары с мета-полем hide_from_catalog = yes. Для этого используем хук pre_get_posts в functions.php вашей темы или дочерней темы:

add_action('pre_get_posts', function($query) {
    if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag())) {
        $meta_query = $query->get('meta_query');
        if (!$meta_query) {
            $meta_query = [];
        }
        $meta_query[] = [
            'key' => 'hide_from_catalog',
            'value' => 'yes',
            'compare' => '!=',
        ];
        $query->set('meta_query', $meta_query);
    }
});

3. Добавление поля в админке для удобства

Для удобства администраторов добавим мета-бокс на страницу редактирования товара, чтобы можно было быстро отметить товар как скрытый из каталога:

add_action('add_meta_boxes', function() {
    add_meta_box('hide_from_catalog_box', 'Скрыть из каталога', function($post) {
        $value = get_post_meta($post->ID, 'hide_from_catalog', true);
        wp_nonce_field('hide_from_catalog_nonce', 'hide_from_catalog_nonce_field');
        ?>
        <label>
            <input type="checkbox" name="hide_from_catalog" value="yes" <?php checked($value, 'yes'); ?> /> Скрыть товар из каталога
        </label>
        <?php
    }, 'product', 'side');
});

add_action('save_post_product', function($post_id) {
    if (!isset($_POST['hide_from_catalog_nonce_field']) || !wp_verify_nonce($_POST['hide_from_catalog_nonce_field'], 'hide_from_catalog_nonce')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['hide_from_catalog']) && $_POST['hide_from_catalog'] === 'yes') {
        update_post_meta($post_id, 'hide_from_catalog', 'yes');
    } else {
        delete_post_meta($post_id, 'hide_from_catalog');
    }
});

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

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

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

  • Ошибка: Товары не скрываются из каталога после установки мета-поля.
    Причина: Кэширование страниц или кэш объекта. Решение: Очистите кэш плагинов (например, WP Rocket, W3 Total Cache) и браузера.
  • Ошибка: Фильтр pre_get_posts не срабатывает.
    Причина: Не тот приоритет подключения или условие is_main_query() не соответствует.
    Решение: Проверьте, что код добавлен в functions.php активной темы и что условие корректно. Можно увеличить приоритет вызова хука (например, 20).
  • Ошибка: Прямой доступ к скрытому товару не работает.
    Причина: Возможно, другие плагины или правила .htaccess блокируют доступ.
    Решение: Проверьте наличие конфликтов плагинов, временно отключите их и проверьте работоспособность.

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

  • Оптимизируйте мета-запросы с помощью индексации базы данных по мета-полям, если товаров много.
  • Не используйте скрытие товаров через изменение статуса «Черновик», если хотите сохранить SEO и прямой доступ.
  • Для массового изменения состояния товаров используйте WP-CLI или SQL-запросы, чтобы эффективно выставить мета-поле на множество товаров.
  • Если ваш магазин большой, рассмотрите использование плагинов вроде Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpurok.ru&utm_medium=article&utm_campaign=kak-otklyuchit-vystavlenie-tovarov-iz-kataloga-v-woocommerce) для оптимизации запросов и управления видимостью.

Сравнение способов скрытия товаров из каталога WooCommerce

МетодСохранение доступа по ссылкеВлияние на SEOСложность реализации
Статус «Черновик»НетОтрицательное, товар не индексируетсяПростая
Плагин скрытия товаровЗависит от плагинаЗависит от реализацииСредняя
Фильтр pre_get_posts с мета-полем (статья)ДаПоложительное, товар доступен и индексируетсяСредняя
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее