У меня 10 тысяч пользователей, около 98% из них никогда не публиковали пост (я имею в виду пост, а не комментарии).
Мне нужен способ массового удаления пользователей с 0 постами.
Метод должен подсчитывать все сообщения, включая пользовательские типы сообщений, и должен использовать правильную функцию WordPress для удаления пользователя, как если бы он был удален вручную на панели инструментов, а не просто для удаления таблицы / строки в mysql, поскольку это может привести к неожиданным результатам.
Есть старый плагин, который делает это, но не учитывает все типы записей, поэтому не может быть использован.
Любая помощь приветствуется.
Ответы:
Если вы хотите удалить большое количество пользователей, вы можете использовать команду wp user delete wp-cli, чтобы избежать тайм-аута сценария.
Вот пример запроса SQL для удаления всех пользователей без сообщений любого типа и статуса .
Поэтому вы можете попробовать эту
непровереннуюоднострочную строку:или в развернутом виде:
Обратите внимание, что мы добавили дополнительное
AND ID NOT IN (1,2,3)
ограничение, чтобы эти пользователи не удалялись (например, пользователи с правами администратора). Вам нужно будет настроить его в соответствии со своими потребностями, а также префикс таблицыwp_
.Когда я кратко проверил это для пары пользователей, я заметил, что мне нужно было добавить
tail -n +2
деталь, чтобы избежать трех верхних строк в заголовке и границы таблицыwp db query
вывода.Здесь мы переназначаем все сообщения пользователю 1, чтобы избежать уведомления:
Надеюсь, что вы можете настроить его в соответствии с вашими потребностями, например, смягчив условия удаления пользователя, добавив
WHERE post_status = 'publish'
.Примечание: не забудьте сделать резервную копию перед тестированием!
источник
Y
или использовать--yes
для всех. Если вы измените sql так, чтобы удалять только тех пользователей, которые опубликовали посты, то вам может понадобиться избежать, например, черновиков. Обратите внимание, что вы упомянули в вопросе пользователей, которые никогда не публиковали сообщения . Это строго означает, что они могут иметь черновики. Я предположил, что вы этого не имели в виду ;-) Пожалуйста, будьте очень конкретны в вопросе, что вы хотите удалить, чтобы избежать догадок. @MichaelRogersВот способ сделать это на PHP. Это может быть медленно и / или по таймауту, но так как это разовая вещь, это не должно иметь большого значения. Временно поместите внутри вашего functions.php или загрузить как новый плагин.
источник
Судя по исходному коду упомянутого вами старого плагина, типы постов, которые он не рассматривает, - это вложения и ревизии . Я думаю, что вы можете легко это исправить, удалив это из исходного кода файла плагина no-posts-user-delete.php
источник