Eu tenho 10 mil usuários, cerca de 98% desses usuários nunca publicaram um post (quero dizer, post não comentários).
Eu preciso de uma maneira de excluir em massa os usuários com 0 postagens.
O método deve contar todas as postagens incluídas nos tipos de postagem personalizados e deve usar a função adequada do WordPress para excluir um usuário como se fosse excluído manualmente no painel e não apenas soltar uma tabela / linha no mysql, pois isso pode causar resultados inesperados.
Há um plug-in antigo que faz isso, mas não considera todos os tipos de postagem, portanto não pode ser realmente usado.
Qualquer ajuda apreciada.
Respostas:
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:ou em forma expandida:
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 tabelawp_
.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 dawp db query
saída.Aqui, redesignamos todas as postagens para o usuário 1, para evitar o aviso:
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!
fonte
Y
ou usar--yes
para todos. Se você modificar o sql para excluir apenas os usuários que publicaram postagens, poderá ser necessário evitar a exclusão, por exemplo, de rascunhos. Observe que você mencionou na pergunta usuários que nunca publicaram uma postagem . Isso significa estritamente que eles podem ter rascunhos. Supus que você não tinha isso em mente ;-) Por favor, seja muito específico na pergunta que deseja excluir para evitar as suposições. @MichaelRogersAqui está uma maneira de fazer isso em PHP. Pode ser lento e / ou tempo limite, mas como é uma coisa única, não deve importar muito. Coloque temporariamente dentro do seu functions.php ou faça o upload como um novo plugin.
fonte
A julgar pelo código fonte do plug-in antigo que você mencionou, os tipos de postagem que ele não considera são anexos e revisão . Eu acho que você pode facilmente corrigir isso removendo isso do código-fonte do arquivo de plugin no-posts-user-delete.php
fonte