Se você tem um grande número de usuários para excluir, você pode usar o usuário wp delete < comando strong> wp-cli para evitar tempos limite do script.
Aqui está um exemplo de uma consulta SQL para excluir todos os usuários sem postagens de qualquer tipo e status .
Você pode, portanto, experimentar este un -ested one-liner:
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
ou de forma expandida:
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
Observe que adicionamos uma restrição AND ID NOT IN (1,2,3)
extra para garantir que esses usuários não sejam excluídos (por exemplo, usuários administradores). Você terá que ajustá-lo às suas necessidades e também o prefixo da tabela wp_
.
Quando testei isso por alguns usuários, notei que precisava adicionar a parte tail -n +2
para evitar as três linhas principais no cabeçalho e na borda da tabela da saída wp db query
.
Aqui, reatribuímos todas as postagens para o usuário 1, para evitar o aviso:
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n]
Espero que você possa ajustá-lo ainda mais às suas necessidades, como relaxar as condições de exclusão do usuário adicionando WHERE post_status = 'publish'
.
Observação: lembre-se de fazer backup antes de testar!