Как удалить все учетные записи пользователей клиентов, которые не сделали ни одного заказа?

Вопрос или проблема

В последнее время я столкнулся с притоком спам-пользователей, регистрирующихся на моем сайте WordPress, и я пытаюсь удалить их всех, если:

  • у них есть роль “Клиент”
  • они не сделали хотя бы один заказ раньше

Поскольку я не смог найти подходящий плагин для этого, я считаю, что SQL-запрос будет быстрым решением. Может кто-то помочь с тем, что мне нужно запросить, чтобы убедиться, что я удаляю только клиентов, а не администраторов, которые не сделали заказ ранее.

Существует простой способ сделать это. Просто создайте файл php и поместите его в папку вашей установки wordpress, а затем получите доступ к этому файлу. Как только вы получите к нему доступ через браузер, он удалит всех спам-пользователей. Перед тем как запустить этот скрипт, сделайте полную резервную копию вашей базы данных, чтобы в случае неудачи вы не потеряли никакие данные. Поместите следующий код в этот файл:

<?php /*Загрузка функций WP и доступа к БД*/
include('wp-load.php');

/*необходимо для wp_user_delete*/
require_once(ABSPATH . 'wp-admin/includes/user.php');

/*Позволить выполняться скрипту бесконечно*/
set_time_limit(0);

/*Получить объект базы данных $wpdb*/
global $wpdb;

$i = 0; /*счетчик начинается с 0, а не с 1*/

/*Логирование времени начала*/
$start_time = microtime(true);

/*Перебрать всех пользователей*/
foreach ($wpdb->get_results('SELECT ID from ' . $wpdb->prefix . 'users ORDER BY ID DESC') as $user) {

    /*Получить объект пользователя*/
    $user = get_user_by('ID', $user->ID);

    /*Проверить, какая роль у этого пользователя (клиент, подписчик, автор и т.д.)*/
    $roles = $user->roles;
    if ($roles[0] == "customer") {

        /*Проверить количество заказов и удалить, если оно равно 0*/
        $order_count = wc_get_customer_order_count($user->ID);
        if ($order_count === 0) {
            wp_delete_user($user->ID);
            /*остановится на 1000-й записи - измените это, если хотите*/
            if ($i++ == 999) {
                /*логирует время, которое потребовалось*/
                $end_time = microtime(true);
                break;
            }
        }
    }
}
if (!$end_time) {
    $end_time = microtime(true);
}
$execution_time = ($end_time - $start_time);

echo "ГОТОВО! Удалено " . $i . " пользователей.<br>";
echo "Время в " . date_default_timezone_get() . " составляет " . date("H:i:s");
echo " Время выполнения скрипта = " . $execution_time . " сек";

Ответ или решение

Удаление неактивных учетных записей пользователей, особенно в средах, подверженных спаму, таких как ваш сайт на WordPress, является важной задачей для поддержания чистоты и производительности. Ниже приведено руководство по удалению всех учетных записей пользователей с ролью "Клиент", которые не сделали ни одного заказа, с использованием PHP-скрипта, который можно запустить напрямую из корневой директории вашего WordPress.

Подготовка к удалению пользователей

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

Создание PHP-скрипта для удаления пользователей

  1. Создайте новый файл, например, delete_spam_users.php, и поместите его в корневой каталог вашего WordPress-сайта.
  2. Скопируйте и вставьте следующий код в созданный файл:
<?php 
/* Загружаем функции WP и доступ к базе данных */
include('wp-load.php');

/* Обязательно для wp_user_delete */
require_once(ABSPATH . 'wp-admin/includes/user.php');

/* Позволим этому скрипту работать долго */
set_time_limit(0);

/* Получаем объект базы данных $wpdb */
global $wpdb;

$i = 0; /* счетчик удаленных пользователей */

/* Записываем время начала выполнения скрипта */
$start_time = microtime(true);

/* Проходим по всем пользователям */
foreach ($wpdb->get_results('SELECT ID FROM ' . $wpdb->prefix . 'users ORDER BY ID DESC') as $user) {

    /* Получаем объект пользователя */
    $user_obj = get_user_by('ID', $user->ID);

    /* Проверяем роль пользователя (клиент, подписчик и т.д.) */
    $roles = $user_obj->roles;
    if (in_array('customer', $roles)) {

        /* Проверяем количество заказов и удаляем, если их 0 */
        $order_count = wc_get_customer_order_count($user->ID);
        if ($order_count === 0) {
            wp_delete_user($user->ID);
            $i++;  /* Увеличиваем счетчик удаленных пользователей */

            /* Прерываем цикл после 1000 удаленных записей */
            if ($i == 1000) {
                break;
            }
        }
    }
}

/* Отображаем результаты выполнения скрипта */
$end_time = microtime(true);
$execution_time = $end_time - $start_time;

echo "ЗАВЕРШЕНО! Удалено " . $i . " пользователей.<br>";
echo "Текущее время: " . date("H:i:s") . " в " . date_default_timezone_get();
echo " Время выполнения скрипта = " . $execution_time . " сек.";
?>

Запуск скрипта

Теперь, когда вы создали файл, вам нужно его запустить. Для этого откройте веб-браузер и перейдите по адресу:

http://ваш_домен/delete_spam_users.php

При обращении к этому URL скрипт выполнит задачу удаления, уведомив вас о числе удаленных пользователей и времени выполнения.

Заключение

Удаление неактивных учетных записей пользователей с ролью "Клиент", которые не сделали ни одного заказа, поможет вам поддерживать в вашей системе порядок и защищенность от спама. Помните о необходимости бэкапа данных и внимательно следите за тем, чтобы не удалить нежелательных пользователей, таких как администраторы. Если у вас есть какие-либо вопросы или если вам нужна помощь, не стесняйтесь обращаться за поддержкой к сообществу WordPress или к своему хостинг-провайдеру.

Оцените материал
Добавить комментарий

Капча загружается...