wpcodes.ru wordpress WP Codеs

WooCommerce: автоматическое удаление неактивных вариаций товаров с оптимизацией базы данных

Диагностика проблемы неактивных вариаций в WooCommerce

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

Как определить неактивные вариации?

  • Вариации без продаж за последний год;
  • Вариации с мета-ключом _stock_status равным outofstock длительное время;
  • Вариации, отключённые вручную (статус private или draft);
  • Вариации, которые не связаны с активными товарами.

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

Пошаговое решение: автоматизация удаления вариаций

1. Создание WP-Cron задачи для периодической очистки

Добавим задачу cron, которая будет запускаться, например, раз в месяц.

add_action('wp', function() {
    if (!wp_next_scheduled('wc_cleanup_inactive_variations')) {
        wp_schedule_event(time(), 'monthly', 'wc_cleanup_inactive_variations');
    }
});

2. Функция удаления неактивных вариаций

Реализуем функцию, которая находит вариации с условием неактивности и удаляет их через wp_delete_post с параметром true для полного удаления.

add_action('wc_cleanup_inactive_variations', function() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => ['private', 'draft'], // варианты выключены
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'date_query'     => [
            [
                'column' => 'post_modified_gmt',
                'before' => '1 year ago',
            ],
        ],
        'fields'         => 'ids',
    ];

    $variations = get_posts($args);

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true);
    }
});

3. Оптимизация базы данных после удаления

После массовых удалений полезно выполнить оптимизацию таблиц с помощью SQL-команды:

global $wpdb;
$wpdb->query('OPTIMIZE TABLE ' . $wpdb->posts);
$wpdb->query('OPTIMIZE TABLE ' . $wpdb->postmeta);

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

  • Проверьте наличие запланированной задачи: wp cron event list (если WP-CLI установлен);
  • Перед и после запуска проверьте количество вариаций в админке и в базе через запрос:
SELECT COUNT(ID) FROM wp_posts WHERE post_type = 'product_variation';
  • Проверьте, что удалённые вариации не появляются в списках товаров и не влияют на функционал;
  • Логи ошибок PHP и WooCommerce должны быть чистыми;
  • Тестируйте на тестовом сайте перед переносом на продакшен.

Частые ошибки и способы их исправления

  • Удаление активных вариаций: неправильные фильтры в WP_Query. Проверяйте статус и дату модификации вариаций.
  • Задача cron не запускается: убедитесь, что WP-Cron включён и работает. Для проверки можно вызвать вручную do_action('wc_cleanup_inactive_variations');.
  • Удалённые вариации отображаются в кэше: очистите кэш сайта и браузера.
  • Проблемы с правами пользователя при удалении: запускайте код под администратором или через WP-CLI с нужными правами.

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

  • Используйте транзакции или проверяйте успешность удаления, чтобы избежать потери данных.
  • Ограничьте количество вариаций, обрабатываемых за один запуск, если база очень большая. Например, добавьте пагинацию в WP_Query.
  • Резервное копирование базы перед массовыми операциями обязательно.
  • Регулярно оптимизируйте базу данных, чтобы избежать фрагментации и ускорить запросы.
  • Для улучшения безопасности добавьте проверку nonce, если запускаете удаление через интерфейс.

Сравнение решений: плагин vs кастомный код

КритерийПлагин (например, WP Reset, Advanced Database Cleaner)Кастомный код
ГибкостьОграничена функциями плагинаПолный контроль над логикой
Простота внедренияБыстро, без навыков программированияТребуются знания PHP и WP API
ПроизводительностьМожет загружать систему из-за универсальностиОптимизирован под конкретные задачи
БезопасностьЗависит от качества плагинаЗависит от реализации и тестирования
ОбновляемостьАвтоматические обновленияТребует поддержки разработчиком
×
-15%
на премиум плагин
Clearfy

Защитите сайт!

Включить Clearfy »