Диагностика проблемы: зачем удалять товары без склада из каталога
В магазинах на WooCommerce часто возникает ситуация, когда товары заканчиваются на складе (stock quantity = 0), и их нужно оперативно скрывать или удалять из каталога, чтобы не вводить покупателей в заблуждение и повысить конверсию. Ручное удаление или скрытие таких товаров — трудоемкий процесс, особенно если товаров много.
Цель — автоматизировать удаление товаров, у которых нет доступного склада, чтобы они не отображались на витрине и в поиске.
Пошаговое решение: автоматическое удаление товаров без склада
1. Проверка настроек WooCommerce для управления запасами
Перед автоматизацией убедитесь, что в WooCommerce включено управление запасами:
WooCommerce → Настройки → Товары → Управление запасами → Включить управление запасамиЕсли управление запасами отключено, WooCommerce не отслеживает количество товара.
2. Использование WP-Cron для регулярной проверки товаров
Добавим в functions.php тему или в кастомный плагин следующий код. Он будет запускаться раз в сутки и удалять товары без наличия на складе.
function wpfaq_remove_out_of_stock_products() {
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '=',
],
],
'fields' => 'ids',
];
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $product_id) {
wp_trash_post($product_id); // Отправляем товар в корзину
// Если нужно окончательное удаление, используйте wp_delete_post($product_id, true);
}
}
}
// Регистрируем событие, если оно еще не создано
if (!wp_next_scheduled('wpfaq_daily_remove_outofstock')) {
wp_schedule_event(time(), 'daily', 'wpfaq_daily_remove_outofstock');
}
add_action('wpfaq_daily_remove_outofstock', 'wpfaq_remove_out_of_stock_products');3. Альтернатива: автоматическое скрытие товаров без склада (без удаления)
Если удаление слишком радикально, можно менять статус товара на "черновик" для скрытия без удаления:
function wpfaq_hide_out_of_stock_products() {
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '=',
],
],
'fields' => 'ids',
];
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $product_id) {
$post = [
'ID' => $product_id,
'post_status' => 'draft',
];
wp_update_post($post);
}
}
}
// Аналогично регистрируем событие
if (!wp_next_scheduled('wpfaq_daily_hide_outofstock')) {
wp_schedule_event(time(), 'daily', 'wpfaq_daily_hide_outofstock');
}
add_action('wpfaq_daily_hide_outofstock', 'wpfaq_hide_out_of_stock_products');Как проверить, что решение сработало
- Перейдите в админку WooCommerce → Товары и отфильтруйте по статусу "Корзина" или "Черновик" в зависимости от выбранного метода. Там должны появиться товары без склада.
- Проверьте витрину сайта — товары без наличия не должны отображаться.
- Для удаления — убедитесь, что товары ушли в корзину (wp_trash_post) или удалены (wp_delete_post).
- Для скрытия — товары должны быть в статусе "черновик" и не показываться посетителям.
Частые ошибки и как их исправить
- Товары не удаляются или не скрываются: Проверьте, включен ли WP-Cron (используйте плагин WP Crontrol для диагностики). Если сайт не получает трафик, задачи могут не запускаться.
- Удаляются товары, которые должны быть в наличии: Проверьте мета-ключ
_stock_status, иногда он может быть некорректным. Используйте также проверку_stock(количество на складе), чтобы точнее фильтровать товары. - Потеря SEO из-за удаления товаров: Вместо удаления лучше переводить товары в статус "черновик" или использовать плагин для редиректов, чтобы избежать 404 ошибок.
- Высокая нагрузка на базу при большом количестве товаров: Делайте обработку партиями, например, по 100 товаров за раз, чтобы избежать тайм-аутов.
Практические советы по оптимизации и безопасности
- Резервное копирование: Перед автоматическим удалением товаров создайте резервную копию базы данных, чтобы избежать потери данных.
- Обработка по времени: Запускайте удаление в ночное время, чтобы минимизировать нагрузку на сервер.
- Логирование: Для отладки добавьте логирование удаленных товаров, например, в файл через
error_log()или отдельную таблицу. - Использование плагинов: Если не хочется писать код, плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpfaq.ru&utm_medium=article&utm_campaign=woocommerce-avto-udaleniye-tovarov-bez-skada-iz-kataloga) предлагает инструменты для очистки каталога и управления товарами без склада.
Сравнение методов: удаление vs скрытие товаров без склада
| Метод | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Удаление (wp_trash_post/wp_delete_post) | - Полное удаление из каталога и базы - Очистка базы от ненужных товаров | - Потеря SEO, если не настроены редиректы - Невозможность быстрого восстановления без резервной копии | Если товар больше не планируется продаваться и нет необходимости в архивации |
| Скрытие (перевод в статус "черновик") | - Быстрое скрытие без потери данных - Можно легко вернуть товар в каталог | - Товар сохраняется в базе, занимает место - Может потребоваться дополнительная фильтрация в поиске | Если планируется вернуть товар в продажу или нужна история товара |