wpdownload.ru wordpress WPDownload.ru

WooCommerce: автоматическое удаление неактивных клиентов и их заказов

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

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

Причины для удаления неактивных клиентов и заказов:

  • Оптимизация базы данных и ускорение загрузки страниц админки;
  • Соблюдение GDPR и других требований по хранению персональных данных;
  • Поддержание актуальности клиентской базы для маркетинга и рассылок;
  • Уменьшение риска накопления мусора и потенциальных ошибок при обновлениях.

Как определить неактивных клиентов и устаревшие заказы в WooCommerce

Неактивным клиентом считаем пользователя, который не заходил на сайт и не совершал заказов больше заданного периода, например, 1 год. Заказы считаются устаревшими, если их статус — отменены, отменены администратором, возвраты или находятся в статусе ожидания оплаты дольше 6 месяцев.

Для диагностики используйте SQL-запросы или плагины для анализа пользователей и заказов, например, WP phpMyAdmin или Adminer.

Пример SQL запроса для поиска неактивных пользователей:

SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE ID NOT IN (SELECT DISTINCT user_id FROM wp_wc_customer_lookup) AND user_registered <= DATE_SUB(NOW(), INTERVAL 1 YEAR);

Этот запрос возвращает пользователей, которые не связаны с покупками и зарегистрированы более года назад.

Пример SQL запроса для поиска устаревших заказов:

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-cancelled', 'wc-refunded', 'wc-failed') AND post_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH);

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

Для решения задачи рекомендуем создать кастомный wp-cron, который будет периодически запускать скрипт удаления. Ниже пример реализации на PHP с использованием стандартных функций WordPress и WooCommerce.

1. Добавление задачи в планировщик WordPress (wp-cron)

add_action('wp', function() {
    if (!wp_next_scheduled('wpd_cleanup_inactive_customers')) {
        wp_schedule_event(time(), 'daily', 'wpd_cleanup_inactive_customers');
    }
});

2. Функция удаления неактивных клиентов и устаревших заказов

add_action('wpd_cleanup_inactive_customers', function() {
    global $wpdb;

    // Удаляем неактивных пользователей (нет заказов, зарегистрированы более года назад)
    $inactive_users = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->users} WHERE ID NOT IN (SELECT DISTINCT user_id FROM {$wpdb->prefix}wc_customer_lookup) AND user_registered <= DATE_SUB(NOW(), INTERVAL 1 YEAR)"
    );

    foreach ($inactive_users as $user_id) {
        wp_delete_user($user_id);
    }

    // Удаляем устаревшие заказы (отмененные, возвраты, просроченные)
    $old_orders = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status IN ('wc-cancelled', 'wc-refunded', 'wc-failed') AND post_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH)"
    );

    foreach ($old_orders as $order_id) {
        wp_delete_post($order_id, true); // true для полного удаления
    }
});

3. Добавление возможности ручного запуска через админ-панель

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

add_action('admin_menu', function() {
    add_submenu_page('tools.php', 'Очистка неактивных клиентов', 'Очистка клиентов', 'manage_options', 'wpd-cleanup', function() {
        if (isset($_POST['wpd_cleanup'])) {
            do_action('wpd_cleanup_inactive_customers');
            echo '<div class="updated notice">Очистка выполнена.</div>';
        }
        echo '<form method="post"><input type="submit" name="wpd_cleanup" class="button button-primary" value="Запустить очистку" /></form>';
    });
});

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

Чтобы убедиться, что удаление работает корректно:

  • Проверьте базу данных — таблицы wp_users и wp_posts должны не содержать старых пользователей и заказов;
  • Запустите вручную очистку через админку и посмотрите логи ошибок;
  • Убедитесь, что важные пользователи и заказы не удалились — протестируйте на тестовой копии сайта;
  • Проверьте наличие wp-cron: в админке или с помощью плагина WP Crontrol.

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

  • Удаление важных пользователей: Неверно задан период или условие. Рекомендуется тестировать на тестовом сайте и добавлять фильтры, например, исключать администраторов.
  • Cron не запускается: На некоторых хостингах wp-cron отключен. Проверяйте наличие cron задачи через WP Crontrol или настройте системный cron на вызов wp-cron.php.
  • Удаление заказов не происходит: Возможно, статус заказа указан неверно. Проверьте статусы через wc_get_order_statuses() и убедитесь, что они совпадают с используемыми в запросе.
  • Ошибка на больших базах данных: Запросы могут быть тяжелыми. Используйте постраничную обработку (batch processing) и делайте паузы между удалениями.

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

  • Перед удалением обязательно делайте резервное копирование базы данных.
  • Удаление больших объемов данных выполняйте в ночное время или в периоды низкой нагрузки.
  • Используйте транзакции и проверяйте успешность удаления.
  • Для повышения производительности используйте индексы на колонках user_registered и post_date.
  • Реализуйте логи для отслеживания удаленных пользователей и заказов.

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

МетодПлюсыМинусыКомпромисс
Ручное удаление через админкуПростой контроль, не требует кодаТрудоемко, риск ошибки при большом количествеИспользовать вместе с автоматизацией
Автоматизация через wp-cron и кодРегулярная очистка без вмешательстваНужны навыки разработки, риск удаления важных данныхТестировать на копии, добавлять исключения
Плагины очистки базыУдобство, готовые решенияМогут не учитывать бизнес-логику магазинаИспользовать как дополнение, а не единственный метод
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше