Как удалить старые товары из WooCommerce по срокам с помощью кода

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

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

Основная задача — автоматически удалять или архивировать такие товары по заданным срокам без ручного поиска и удаления.

Как определить «старый» товар в WooCommerce

Обычно критерии отбора товаров для удаления:

  • Дата создания товара (post_date) старше заданного периода
  • Пользовательские мета-поля с датой окончания продажи (например, _expiration_date)
  • Статус товара (например, только опубликованные)

В WooCommerce товары — это тип записи product, поэтому с ними можно работать как с обычными постами.

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

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

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

function delete_old_woocommerce_products() {
    $days_old = 180; // количество дней
    $date_query = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_query,
                'inclusive' => true,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $old_products = get_posts($args);

    foreach ($old_products as $product_id) {
        wp_delete_post($product_id, true); // true — принудительное удаление, минуя корзину
    }
}

2. Запуск функции вручную или через WP-CLI

Для однократного запуска можете вызвать функцию из консоли WP-CLI:

wp eval 'delete_old_woocommerce_products();'

Или временно добавить вызов в functions.php, например, при загрузке админки:

add_action('admin_init', 'delete_old_woocommerce_products');

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

Удаление товаров по пользовательскому мета-полю (например, дате окончания продажи)

Если в товарах есть мета-поле _expiration_date со значением в формате YYYY-MM-DD, можно удалить устаревшие товары так:

function delete_expired_products() {
    $today = date('Y-m-d');

    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'     => '_expiration_date',
                'value'   => $today,
                'compare' => '<',
                'type'    => 'DATE',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $expired_products = get_posts($args);

    foreach ($expired_products as $product_id) {
        wp_delete_post($product_id, true);
    }
}

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

  • В админке WooCommerce перейдите в список товаров — удалённые товары должны исчезнуть.
  • Проверьте базу данных в таблице wp_posts, чтобы убедиться, что записи типа product с датами старше заданных отсутствуют.
  • Если вы используете кэширование, очистите кэш сайта и браузера.
  • Можно добавить логирование удаления, например, записывать ID удалённых товаров в файл или опцию, чтобы убедиться в работе скрипта.

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

  • Ничего не удаляется: проверьте формат даты и параметры date_query. Убедитесь, что товары действительно старше указанного срока.
  • Удаляются не те товары: проверьте правильность условий в meta_query и date_query, возможно, стоит добавить дополнительные фильтры.
  • Сайт падает при выполнении: если товаров очень много, удаление в одном запросе может перегрузить сервер. Разбейте удаление на партии по 50-100 товаров.
  • Удаление не происходит сразу: если используется кеширование или CDN, обновите кеш.

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

  • Запускать удаление лучше через WP-CLI или по cron с разбивкой на небольшие партии.
  • Перед удалением делайте резервную копию базы данных.
  • Если нужно не удалять, а скрывать устаревшие товары — меняйте статус поста на draft или private.
  • Для больших магазинов используйте WP_Query с пагинацией и удаляйте товары по частям, чтобы избежать таймаута.
  • Добавьте логирование: например, через error_log или запись в отдельную таблицу для аудита.

Сравнение подходов удаления товаров

МетодКодПлагинПреимуществаНедостатки
Удаление по дате создания Простой код на PHP Нет Быстро реализуется, не требует установки плагинов Не подходит, если критерии сложнее
Удаление по мета-полю Код с meta_query Нет Гибко для кастомных условий Требует правильного заполнения мета-полей
Плагины для очистки WooCommerce Например, WP Bulk Delete Удобный интерфейс, дополнительные функции Может быть избыточным, нагрузка на сайт

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическое отмечивание новых статей в WordPress
21.03.2026
Как автоматизировать создание резервных копий WordPress с помощью плагинов и кода
05.11.2025
Как создать автоматический раздел для новостей в WordPress с фильтрацией по категориям
25.12.2025
Как добавить пользовательские роли и права в WordPress: практическое руководство
16.11.2025
Как сделать автоматическое разделение статьи на страницы в WordPress
23.01.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее