wp-kurs.ru wordpress WP-Kurs

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

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

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

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

Важно точно определить критерии неактивности. Обычно это пользователи, которые:

  • не входили в систему более 6 месяцев;
  • не совершали заказов;
  • не обновляли профиль.

Для анализа можно использовать SQL-запрос к базе данных WordPress:

SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE ID NOT IN (SELECT user_id FROM wp_wc_customer_lookup);

Этот запрос покажет пользователей, которые не являются покупателями (т.е. не сделали ни одного заказа). Чтобы определить дату последнего входа, если в системе нет плагина для логов, придётся использовать плагины вроде WP Last Login.

Пошаговое решение: как заблокировать неактивных пользователей через код

Для блокировки (запрета входа) пользователей, неактивных более 6 месяцев, можно добавить следующий код в файл functions.php вашей темы или в собственный плагин:

function block_inactive_users_woocommerce() {
    $user = wp_get_current_user();
    if ( ! $user->exists() ) {
        return;
    }

    // Получаем дату последнего входа из user meta
    $last_login = get_user_meta( $user->ID, 'last_login', true );
    if ( ! $last_login ) {
        // Если данных нет, считаем пользователя неактивным
        wp_logout();
        wp_die('Ваш аккаунт заблокирован из-за длительной неактивности. Свяжитесь с поддержкой.');
    }

    $inactive_period = 6 * 30 * 24 * 60 * 60; // 6 месяцев в секундах
    if ( ( time() - $last_login ) > $inactive_period ) {
        wp_logout();
        wp_die('Ваш аккаунт заблокирован из-за длительной неактивности. Свяжитесь с поддержкой.');
    }
}
add_action( 'init', 'block_inactive_users_woocommerce' );

// Обновляем мета при логине
function update_last_login_timestamp( $login, $user ) {
    update_user_meta( $user->ID, 'last_login', time() );
}
add_action( 'wp_login', 'update_last_login_timestamp', 10, 2 );

Этот код отслеживает дату последнего входа и блокирует пользователя, если он не активен более 6 месяцев.

Удаление неактивных пользователей через WP-CLI

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

wp user list --role=subscriber --field=ID --format=csv --last_login='< 6 months ago' > inactive_users.txt

for user_id in $(cat inactive_users.txt); do
  wp user delete $user_id --reassign=1
  echo "Deleted user ID: $user_id"
done

Этот скрипт удалит подписчиков, не входивших в систему более 6 месяцев, и переназначит их контент админу с ID 1.

Как проверить, что блокировка или удаление сработали

  • Попробуйте войти под аккаунтом пользователя, который должен быть заблокирован — должно появиться сообщение об ошибке и выход из системы.
  • Проверьте базу данных, что у пользователей, которых планировали удалить, нет записей в таблице wp_users.
  • Используйте запросы SQL или WP-CLI для проверки активности пользователей.

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

  • Отсутствие данных о последнем входе. Без плагина или собственного кода, сохраняющего дату входа, определить неактивных пользователей невозможно. Решение: используйте код из примера для записи мета-данных.
  • Удаление пользователей с заказами. Перед удалением убедитесь, что пользователь не имеет активных заказов, чтобы не нарушить целостность данных WooCommerce.
  • Блокировка администраторов. Исключайте из блокировки админов и редакторов, добавив проверку роли в код.
  • Потеря данных при удалении. Используйте параметр --reassign при удалении пользователей через WP-CLI, чтобы переназначить их контент.

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

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

Сравнение вариантов удаления и блокировки пользователей WooCommerce

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

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

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