Se você tiver um grande número de usuários para excluir, poderá usar o comando wp user delete wp-cli para evitar o tempo limite do script.
Aqui está um exemplo de uma consulta SQL para excluir todos os usuários sem postagens de qualquer tipo e status .
Portanto, você pode tentar esta linha única não testada :
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 em 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 AND ID NOT IN (1,2,3)
restrição extra para garantir que esses usuários não sejam excluídos (por exemplo, usuários administrativos). Você precisará ajustá-lo às suas necessidades e também ao prefixo da tabela wp_
.
Quando testei brevemente isso para alguns usuários, notei que era necessário adicionar a tail -n +2
peça para evitar as três principais linhas do cabeçalho e a borda da tabela da wp db query
saída.
Aqui, redesignamos 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'
.
Nota: Lembre-se de fazer backup antes de testar!