Вопрос или проблема
У меня есть сайт с более чем 90 тысячами пользователей с ролями подписчика. Я хочу удалить пользователей только с ролью подписчика, используя phpmyadmin. Я знаю, как это сделать, но некоторые пользователи имеют несколько ролей, например, у нескольких пользователей есть как роль редактора, так и роль подписчика. Теперь мой запрос удаляет всех пользователей с ролью подписчика, включая пользователей с несколькими ролями, но я этого не хочу. Что мне нужно обновить в моем запросе, чтобы удалить пользователей, которые имеют только роль подписчика? Это мой текущий запрос.
DELETE FROM wp_users INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id WHERE meta_key = 'wp_capabilities' AND meta_value LIKE '%subscriber%'.
Любой совет будет полезен, спасибо заранее, и может кто-нибудь сказать, удаляет ли этот запрос также поля в wp_usermeta?
Пожалуйста, сначала запустите с --dry-run
, а также сделайте полное резервное копирование базы данных!
Ответ или решение
Чтобы удалить пользователей, имеющих только роль подписчика (subscriber) в WordPress, одним из наиболее важных шагов является тщательное формулирование SQL-запроса. Ваш текущий запрос удаляет всех пользователей, обладающих ролью подписчика, включая тех, кто имеет несколько ролей, таких как редактор (editor) и подписчик. Для достижения вашей цели необходимо изменить запрос так, чтобы он удалял только тех пользователей, которые имеют исключительно роль подписчика.
Изменение SQL-запроса
Чтобы выбрать пользователей, имеющих только роль подписчика, можно воспользоваться следующим запросом:
DELETE wp_users, wp_usermeta
FROM wp_users
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_usermeta.meta_key = 'wp_capabilities'
AND wp_usermeta.meta_value = 'a:1:{s:9:"subscriber";b:1;}';
Объяснение запроса:
-
JOIN таблиц: Мы используем оператор
INNER JOIN
, чтобы связать таблицыwp_users
иwp_usermeta
по идентификатору пользователя. -
Определение мета-ключа: Мы фильтруем записи по
meta_key
равному'wp_capabilities'
, что указывает на то, что это поле содержит роли пользователя. -
Уникальное значение мета: Важнейшим моментом является проверка значения
meta_value
. Значениеa:1:{s:9:"subscriber";b:1;}
соответствует сериализованному массиву с единственной ролью — подписчика. Таким образом, мы гарантируем, что удаляем только тех пользователей, у которых роль подписчика единственная. -
Удаление записей: Обратите внимание, что в данном запросе удаляются записи из обеих таблиц —
wp_users
иwp_usermeta
.
Предостережения
-
Резервное копирование базы данных: Прежде чем выполнять запрос, сделайте полное резервное копирование вашей базы данных. Это даст вам возможность вернуть все в исходное состояние в случае ошибки.
-
Тестирование на безопасной среде: Рекомендуется сначала протестировать запрос в тестовой среде или использовать флаг
--dry-run
(если ваш SQL-клиент это поддерживает), чтобы убедиться, что он работает корректно.
Влияние на wp_usermeta
Ваш запрос действительно удаляет записи из таблицы wp_usermeta
, так как при выполнении операции DELETE
указываются обе таблицы. Это важно учитывать, поскольку записи в wp_usermeta
будут также удалены для пользователей, которые соответствуют заданным критериям. Убедитесь, что вы не хотите сохранить какую-либо информацию о пользователях перед их удалением.
Заключение
Следуя приведённой информации и обновлённому запросу, вы сможете успешно удалить только тех пользователей, которые имеют единственную роль подписчика. Это обеспечит целенаправленное управление пользователями, не затрагивая других, у кого могут быть более широкие права. Удачи в вашей работе с базой данных!