Вопрос или проблема
В последнее время я столкнулся с притоком спам-пользователей, регистрирующихся на моем сайте 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-скрипта для удаления пользователей
- Создайте новый файл, например,
delete_spam_users.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; /* счетчик удаленных пользователей */
/* Записываем время начала выполнения скрипта */
$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 или к своему хостинг-провайдеру.