Intereting Posts
Как создать постоянную ссылку с двумя категориями, с порядком, основанным на родительской категории? Необходимо зафиксировать «ключевое слово», добавленное в конец сообщения, даже с «довольно постоянными», Список обновлений плагинов в панели администратора Варианты регистрации и утверждения UPDATE в результатах SELECT. SQL-запрос для свопинга Author с значением Meta Box Изменение URL-адресов привязки? настраиваемый плагин типа сообщения – единственный шаблон Отображение списка контактов Пользовательский тип дублирования сообщений для новых сообщений Добавить Wrapper с классом в WYSIWYG Editor Как отсортировать сообщения WordPress по первой букве или цифрам? Как получить имя файла прикрепленного файла, а не вложения Форма пользовательского ввода данных с идентификатором авто членства Как получить уведомление при установке плагина? Загрузка файлов в меню плагина

Как я могу удалить всех пользователей, которые никогда не комментировали / опубликовали спам-комментарии?

Моя база данных пользователей заполнена роботами. Есть ли полезная команда SQL для удаления всех пользователей, которые либо a) отправили комментарий, помеченный как спам Akismet, либо b) никогда не отправляли комментарий?

Solutions Collecting From Web of "Как я могу удалить всех пользователей, которые никогда не комментировали / опубликовали спам-комментарии?"

Привет @ Ник Ломан:

Существует не одна команда, а несколько. Будьте осторожны, хотя резервное копирование базы данных перед запуском этого, потому что есть крошечный шанс, что что-то в вашей базе данных отличается от моего, особенно после обновления .1 до 3.0 и, следовательно, оно может не работать отлично, и вам придется восстанавливать.

DELETE FROM wp_usermeta WHERE user_id IN ( SELECT user_id FROM wp_comments WHERE user_id<>0 AND comment_approved='spam' ) AND user_id NOT IN ( SELECT DISTINCT user_id FROM wp_comments ); DELETE FROM wp_users WHERE ID IN ( SELECT user_id FROM wp_comments WHERE user_id<>0 AND comment_approved='spam' ) AND ID NOT IN ( SELECT DISTINCT user_id FROM wp_comments ); DELETE FROM wp_commentmeta WHERE comment_id IN ( SELECT comment_ID FROM wp_comments WHERE comment_approved='spam' ); DELETE FROM wp_comments WHERE comment_approved='spam'; 

Вы хотите использовать функцию wp_delete_user (): http://codex.wordpress.org/Function_Reference/wp_delete_user

Однако сначала вам нужно удалить все идентификаторы пользователей. Я бы предложил получить их, выполнив что-то вроде следующего (обратите внимание: этот код не протестирован):

 global $wpdb; $delete_ids = $wpdb->get_col( "SELECT users.ID FROM {$wpdb->users} users LEFT JOIN {$wpdb->prefix}comments comments ON comments.user_id = users.ID WHERE 1 AND ( comments.comment_ID IS NULL OR comments.comment_approved = 'spam' )" ); foreach ($delete_ids as $id) { wp_delete_user($id); } 

Я бы предложил запустить запрос вручную и проверить результаты проверки перед удалением. И, конечно же, создайте резервную копию своей базы данных, прежде чем вносить какие-либо изменения.