Если вы хотите удалить большое количество пользователей, вы можете использовать команду wp user delete wp-cli, чтобы избежать тайм-аута сценария.
Вот пример запроса SQL для удаления всех пользователей без сообщений любого типа и статуса .
Поэтому вы можете попробовать эту непроверенную однострочную строку:
wp user delete $(wp db query "SELECT ID FROM wp_users WHERE ID NOT IN (SELECT DISTINCT post_author FROM wp_posts ) AND ID NOT IN (1,2,3)" | tail -n +2 ) --reassign=1
или в развернутом виде:
wp user delete $(wp db query
"SELECT ID
FROM wp_users
WHERE ID NOT IN (
SELECT DISTINCT post_author FROM wp_posts
) AND ID NOT IN (1,2,3)" | tail -n +2
) --reassign=1
Обратите внимание, что мы добавили дополнительное AND ID NOT IN (1,2,3)
ограничение, чтобы эти пользователи не удалялись (например, пользователи с правами администратора). Вам нужно будет настроить его в соответствии со своими потребностями, а также префикс таблицы wp_
.
Когда я кратко проверил это для пары пользователей, я заметил, что мне нужно было добавить tail -n +2
деталь, чтобы избежать трех верхних строк в заголовке и границы таблицы wp db query
вывода.
Здесь мы переназначаем все сообщения пользователю 1, чтобы избежать уведомления:
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n]
Надеюсь, что вы можете настроить его в соответствии с вашими потребностями, например, смягчив условия удаления пользователя, добавив WHERE post_status = 'publish'
.
Примечание: не забудьте сделать резервную копию перед тестированием!