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

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

Большие интернет-магазины на WooCommerce со временем накапливают большое количество пользователей, которые зарегистрировались, но не делали заказов или давно не активны. Это замедляет работу базы данных, усложняет маркетинговые кампании и мешает анализу клиентов. Чтобы выявить неактивных клиентов, нужно понять, что считать «неактивностью» — обычно это отсутствие заказов за определённый период.

Для диагностики можно выполнить SQL-запрос в базе данных или использовать PHP-код с WP_Query, чтобы получить список пользователей, не совершавших покупок, например, за последние 12 месяцев.

SELECT u.ID, u.user_login, MAX(p.post_date) AS last_order_date
FROM wp_users u
LEFT JOIN wp_posts p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING last_order_date IS NULL OR last_order_date < DATE_SUB(NOW(), INTERVAL 12 MONTH);

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

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

1. Создаём WP-Cron задачу для периодической проверки

Добавим функцию, которая запускается раз в месяц и удаляет пользователей, не совершавших покупок более 12 месяцев.

function wpeditor_delete_inactive_customers() {
    $args = [
        'role' => 'customer',
        'fields' => 'ID',
        'number' => -1,
    ];
    $user_query = new WP_User_Query($args);
    $inactive_users = [];

    foreach ($user_query->get_results() as $user_id) {
        $orders = wc_get_orders([
            'customer_id' => $user_id,
            'limit' => 1,
            'orderby' => 'date',
            'order' => 'DESC',
            'status' => ['completed', 'processing'],
        ]);
        if (empty($orders)) {
            $inactive_users[] = $user_id; // Нет заказов вообще
        } else {
            $last_order_date = $orders[0]->get_date_created();
            if ($last_order_date < strtotime('-12 months')) {
                $inactive_users[] = $user_id;
            }
        }
    }

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

if (!wp_next_scheduled('wpeditor_monthly_inactive_customer_cleanup')) {
    wp_schedule_event(time(), 'monthly', 'wpeditor_monthly_inactive_customer_cleanup');
}
add_action('wpeditor_monthly_inactive_customer_cleanup', 'wpeditor_delete_inactive_customers');

2. Добавляем возможность ручного запуска из админки (опционально)

Для тестирования или внеплановой очистки полезно сделать кнопку в админке.

add_action('admin_menu', function() {
    add_submenu_page('users.php', 'Удалить неактивных клиентов', 'Удалить неактивных', 'manage_options', 'wpeditor-delete-inactive', 'wpeditor_delete_inactive_page');
});

function wpeditor_delete_inactive_page() {
    if (isset($_POST['wpeditor_delete_inactive_submit'])) {
        wpeditor_delete_inactive_customers();
        echo '<div class="updated notice">Удаление завершено.</div>';
    }
    echo '<form method="post"><input type="submit" name="wpeditor_delete_inactive_submit" value="Удалить неактивных клиентов" class="button button-primary" /></form>';
}

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

  • Проверьте Cron задачи с помощью плагина WP Crontrol — должна быть задача wpeditor_monthly_inactive_customer_cleanup.
  • Посмотрите список пользователей с ролью «customer» и убедитесь, что неактивные удалены.
  • Для ручного запуска — посетите страницу в админке «Пользователи -> Удалить неактивных» и нажмите кнопку, затем проверьте логи и пользователей.
  • Можно добавить логирование в функцию удаления для контроля, например, записывать в файл или опцию число удалённых пользователей.

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

  • Удаляются администраторы или другие роли. Проверьте, что в запросах используется фильтр по роли customer.
  • Функция не запускается по Cron. Убедитесь, что WordPress Cron включён и нет конфликтов с другими плагинами. Для отладки используйте WP Crontrol.
  • Удалённые пользователи возвращаются. Проверьте, не используется ли какой-то плагин, который автоматически создаёт пользователей.
  • Удаление занимает слишком много ресурсов. Для больших баз ограничьте количество пользователей, обрабатываемых за один запуск, и используйте деление на партии.

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

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

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

МетодПреимуществаНедостатки
WP-Cron + PHP (как в статье)Гибкость, интеграция с WooCommerce, автоматизацияНагрузка при большом количестве пользователей, требует отладки
SQL-запрос в базе напрямуюБыстрое выполнение, точечное удалениеРиск ошибок, сложность интеграции, нет логики WP
Плагины очистки пользователейПростота для непрофессионаловМогут быть громоздкими, не всегда учитывают специфику WooCommerce

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

⭐⭐⭐⭐⭐
Как создать плагин для автоматического сохранения changelogов в WordPress
30.11.2025
WooCommerce: как использовать WP-Cron для автоматического изменения стоимости товаров
12.06.2026
Как настроить автоматический импорт товаров в WordPress: пошаговое руководство
26.11.2025
Как создать автоматический кэш в WordPress для ускорения сайта
28.01.2026
Как автоматизировать создание и обновление панорамных галерей в WordPress
12.03.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙