Удалить пользователя только с ролью подписчика

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

У меня есть сайт с более чем 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;}';

Объяснение запроса:

  1. JOIN таблиц: Мы используем оператор INNER JOIN, чтобы связать таблицы wp_users и wp_usermeta по идентификатору пользователя.

  2. Определение мета-ключа: Мы фильтруем записи по meta_key равному 'wp_capabilities', что указывает на то, что это поле содержит роли пользователя.

  3. Уникальное значение мета: Важнейшим моментом является проверка значения meta_value. Значение a:1:{s:9:"subscriber";b:1;} соответствует сериализованному массиву с единственной ролью — подписчика. Таким образом, мы гарантируем, что удаляем только тех пользователей, у которых роль подписчика единственная.

  4. Удаление записей: Обратите внимание, что в данном запросе удаляются записи из обеих таблиц — wp_users и wp_usermeta.

Предостережения

  • Резервное копирование базы данных: Прежде чем выполнять запрос, сделайте полное резервное копирование вашей базы данных. Это даст вам возможность вернуть все в исходное состояние в случае ошибки.

  • Тестирование на безопасной среде: Рекомендуется сначала протестировать запрос в тестовой среде или использовать флаг --dry-run (если ваш SQL-клиент это поддерживает), чтобы убедиться, что он работает корректно.

Влияние на wp_usermeta

Ваш запрос действительно удаляет записи из таблицы wp_usermeta, так как при выполнении операции DELETE указываются обе таблицы. Это важно учитывать, поскольку записи в wp_usermeta будут также удалены для пользователей, которые соответствуют заданным критериям. Убедитесь, что вы не хотите сохранить какую-либо информацию о пользователях перед их удалением.

Заключение

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

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

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