WPExperts

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

Диагностика проблемы: почему важно удалять товары с нулевым остатком

В интернет-магазинах на WooCommerce часто возникает ситуация, когда товары с нулевым остатком остаются в каталоге, что приводит к негативному опыту пользователей и может влиять на SEO. Автоматическое удаление таких товаров помогает поддерживать актуальность ассортимента и улучшать производительность сайта.

Пошаговое решение: автоматическое удаление товаров с нулевым остатком через WP-Cron

1. Создаем функцию для удаления товаров с нулевым остатком

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

function wpexperts_delete_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC'
            ]
        ],
        'post_status'    => 'publish',
        'fields'         => 'ids',
    ];

    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $product_id) {
            wp_trash_post($product_id); // Перемещаем товар в корзину
        }
    }
}

2. Регистрируем событие WP-Cron для регулярного запуска

Добавьте в functions.php следующий код для создания еженедельного задания:

function wpexperts_schedule_delete_out_of_stock() {
    if (!wp_next_scheduled('wpexperts_delete_out_of_stock_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpexperts_delete_out_of_stock_hook');
    }
}
add_action('wp', 'wpexperts_schedule_delete_out_of_stock');

add_action('wpexperts_delete_out_of_stock_hook', 'wpexperts_delete_out_of_stock_products');

3. Запуск задачи вручную для проверки

Для тестирования запустите функцию вручную, вызвав wpexperts_delete_out_of_stock_products(); в консоли отладки или временно добавив вызов в код и обновив сайт.

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

  • Перейдите в WooCommerce → Товары и убедитесь, что товары с нулевым остатком перемещены в корзину.
  • Проверьте логи сервера на предмет ошибок, связанных с WP-Cron (если есть).
  • Для подтверждения выполнения WP-Cron можно использовать плагин Query Monitor или посмотреть событие в базе данных в таблице wp_options в опции cron.

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

  • Товары не удаляются: Проверьте, что у товаров действительно есть мета-ключ _stock и его значение равно '0'. Иногда WooCommerce может использовать другой способ хранения запасов.
  • WP-Cron не запускается: Убедитесь, что на сервере есть реальные HTTP-запросы к сайту, иначе WP-Cron не сработает. Для критичных задач лучше настроить системный cron.
  • Удаляются не те товары: Проверьте параметры запроса WP_Query, чтобы не затронуть товары с положительным остатком.

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

  • Удаление товаров лучше не делать слишком часто, чтобы не создавать нагрузку на базу данных. Оптимально — раз в неделю.
  • Перед удалением товаров можно сделать резервную копию базы.
  • Если хотите не удалять, а отключать товары с нулевым остатком, замените wp_trash_post на wp_update_post(['ID' => $product_id, 'post_status' => 'draft']).
  • Для больших магазинов рекомендуется выполнять удаление пачками, чтобы избежать таймаута PHP.

Сравнение вариантов удаления товаров с нулевым остатком

МетодПлюсыМинусы
WP-Cron + PHP код (описанный выше)Не требует сторонних плагинов, гибкий, легко кастомизируетсяЗависит от работы WP-Cron, требует базовых навыков PHP
Плагины автоматического управления запасамиПростой интерфейс, дополнительные функцииМожет влиять на производительность, требует обновлений, потенциальные конфликты
Ручное удаление через админкуПросто и понятноТрудозатратно и легко забыть
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »