wpmake.ru wordpress WPMake

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

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

В стандартной конфигурации WooCommerce при оформлении заказа гостевой пользователь создаётся в базе данных как пользователь WordPress с минимальными правами. При большом количестве заказов это приводит к росту количества лишних пользователей, что замедляет работу сайта и усложняет администрирование. Автоматическое удаление таких пользователей после выполнения заказа позволяет поддерживать базу пользователей в чистоте и уменьшить нагрузку.

Как определить гостевого пользователя в WooCommerce

Гостевые пользователи, оформляющие заказы без регистрации, обычно имеют email, указанный в заказе, но не имеют подтверждённого аккаунта с паролем. В базе WordPress это пользователь с ролью customer, но без заданного пароля или с пустым значением в поле user_pass (хотя в базе пароли хэшируются, можно ориентироваться на дату создания и активность).

Также можно ориентироваться на пользователей, которые созданы автоматически при гостевом оформлении и не имеют активности входа в систему.

Пошаговое решение: автоматическое удаление гостевых пользователей после оформления заказа

1. Подключаемся к хуку смены статуса заказа

Для начала нужно отследить момент, когда заказ переходит в статус completed или processing — в зависимости от логики магазина. После этого запускаем функцию удаления пользователя, если он гость.

2. Реализация кода удаления гостевого пользователя

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

add_action('woocommerce_order_status_completed', 'delete_guest_user_after_order');

function delete_guest_user_after_order( $order_id ) {
    if ( ! $order_id ) return;

    $order = wc_get_order( $order_id );
    if ( ! $order ) return;

    $user_id = $order->get_user_id();

    // Если пользователь зарегистрирован, не удаляем
    if ( $user_id > 0 ) return;

    // Получаем email из заказа
    $billing_email = $order->get_billing_email();
    if ( ! $billing_email ) return;

    // Ищем пользователя по email
    $user = get_user_by( 'email', $billing_email );
    if ( ! $user ) return;

    // Проверяем роль пользователя
    if ( in_array( 'customer', (array) $user->roles ) ) {
        // Дополнительная проверка: дата создания, отсутствие активности можно добавить при необходимости
        wp_delete_user( $user->ID );
    }
}

3. Настройка для других статусов заказов

Если в вашем магазине статус успешного заказа отличается (например, processing), замените хук woocommerce_order_status_completed на woocommerce_order_status_processing или добавьте оба.

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

  • Оформите тестовый заказ как гость, используя уникальный email.
  • После смены статуса заказа на «завершён» в админке WordPress проверьте раздел «Пользователи» — соответствующий пользователь должен исчезнуть.
  • Если пользователь остался, проверьте логи ошибок и отладочную информацию.

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

  • Пользователь не удаляется: возможно, заказ не переходит в нужный статус, либо email в заказе не совпадает с email пользователя. Проверьте правильность хуков и данных.
  • Удаляются зарегистрированные пользователи: в коде добавлена проверка роли, но если у пользователя несколько ролей, убедитесь, что условие in_array('customer', $user->roles) корректно работает.
  • Удаление происходит слишком рано: если заказ не завершён, а пользователь уже удалён, стоит поменять хук на более поздний статус.

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

  • Не удаляйте пользователей, если есть вероятность, что они могут повторно зайти или использовать аккаунт — удаление лучше делать только для чисто гостевых клиентов.
  • Резервное копирование базы данных перед внедрением автоматического удаления обязательно.
  • Если на сайте много заказов, рассмотрите реализацию пакетного удаления гостей через WP-CLI или регулярные задачи WP-Cron.
  • Для дополнительной безопасности можно логировать удаление пользователей в отдельный лог-файл.

Сравнение подходов удаления гостевых пользователей

МетодПреимуществаНедостатки
Удаление через хук статуса заказаАвтоматизация, моментальное удаление после заказаРиск ошибочного удаления, зависит от статусов
Пакетное удаление через WP-CLI или скриптыКонтроль, возможность массового удаленияНе автоматизировано, требует админских навыков
Удаление через сторонние плагиныПростота настройки, готовые решенияЗависимость от плагина, возможные конфликты
×
Сделай свой сайт крутым!

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

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