Что значит неактивный пользователь в WooCommerce
Неактивные пользователи — это те, кто зарегистрировался в вашем интернет-магазине на базе WooCommerce, но не совершал покупок и не проявлял активности в течение длительного времени. Удаление таких пользователей помогает оптимизировать базу данных, снизить нагрузку и повысить безопасность.
Диагностика: как определить неактивных пользователей в WooCommerce
Для начала нужно определить критерии неактивности. Обычно это:
- Отсутствие заказов (post_type = shop_order) с user_id;
- Дата регистрации более 6 месяцев назад;
- Отсутствие активности в личном кабинете или комментариях.
Проверить количество таких пользователей можно SQL-запросом к базе данных:
SELECT ID, user_login, user_registered FROM wp_users u
LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_type = 'shop_order'
WHERE p.ID IS NULL AND user_registered < DATE_SUB(NOW(), INTERVAL 6 MONTH);Этот запрос вернёт список пользователей, которые не сделали заказ и зарегистрировались более полугода назад.
Пошаговое решение для удаления неактивных пользователей
1. Резервное копирование базы данных
Перед удалением важно сделать полное резервное копирование базы данных, чтобы иметь возможность восстановить данные в случае ошибки.
2. Создание кастомного WP-CLI скрипта для удаления
Используем WP-CLI для безопасного массового удаления пользователей. Вот пример команды для удаления:
wp user delete $(wp user list --role=subscriber --field=ID --meta_key=last_order_date --meta_compare='<' --meta_value='2023-01-01' --format=csv) --yes<Но WooCommerce не хранит дату последнего заказа в usermeta по умолчанию, поэтому предварительно нужно добавить мета-ключ или использовать SQL для выборки ID пользователей.
3. PHP-скрипт для выборки и удаления
Пример кода для удаления пользователей без заказов и с датой регистрации старше 6 месяцев:
function delete_inactive_woocommerce_users() {
global $wpdb;
$date_limit = date('Y-m-d', strtotime('-6 months'));
$user_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT u.ID FROM {$wpdb->users} u
LEFT JOIN {$wpdb->prefix}posts p ON u.ID = p.post_author AND p.post_type = 'shop_order'
WHERE p.ID IS NULL AND u.user_registered < %s",
$date_limit
) );
foreach ( $user_ids as $user_id ) {
require_once( ABSPATH . 'wp-admin/includes/user.php' );
wp_delete_user( $user_id );
}
}
add_action('init', 'delete_inactive_woocommerce_users');Внимание: после тестирования удаление отключите этот хук, чтобы не удалять пользователей на каждом запросе.
Проверка результата после удаления
- Выполните повторный SQL-запрос из раздела диагностики, чтобы убедиться, что пользователей с указанными критериями больше нет.
- Проверьте раздел "Пользователи" в админке WooCommerce — количество подписчиков должно уменьшиться.
- Обязательно проверьте работу сайта и доступ существующих пользователей.
Частые ошибки и как их исправить
- Удаление активных пользователей: Неправильные критерии могут удалить клиентов с заказами. Решение — всегда проверять наличие заказов через post_type shop_order и post_author.
- Удаление пользователей с ролью администратора или менеджера: Убедитесь, что фильтруете только нужные роли (например, subscriber).
- Удаление пользователей без резервной копии: Всегда делайте бэкап базы перед массовыми операциями.
- Скрипт удаляет пользователей при каждом запросе: Добавляйте проверку, чтобы скрипт срабатывал только один раз, например, по cron или вручную.
Практические советы по безопасности и производительности
- Используйте WP-CLI для массовых операций — это надежнее и быстрее, чем PHP-скрипты в браузере.
- Ограничивайте выборку пользователей в пакетах по 50-100, чтобы не перегружать сервер.
- Храните даты последней активности или последнего заказа в usermeta для быстрого доступа и фильтрации.
- Используйте транзакции в базе данных, если работаете напрямую с SQL для удаления.
Сравнение способов удаления неактивных пользователей
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| WP-CLI | Быстро, безопасно, можно запускать по cron | Требуется доступ к серверу | Для опытных администраторов |
| PHP-скрипт с хуком | Прост в реализации, можно встроить в тему или плагин | Риск перегрузки сервера, может срабатывать многократно | Использовать с проверками и отключать после выполнения |
| Плагины очистки пользователей | Удобный интерфейс, дополнительные функции | Могут быть платными, влиять на производительность | Подходит для новичков |