Excluir todos usuários do Blog WordPress

Rate this post

O CMS WordPress permite você excluir usuários através do próprio painel. Indo em “Usuários” >> “Todos os Usuários” é possível excluir os usuários de 20 em 20. Mas e se você tiver centenas ou até milhares de usuários e quiser excluí-los? Se for excluir de 20 em 20, vai levar um bom tempo para concluir esta tarefa, sem falar que será um serviço um tanto quanto tedioso. Então, como proceder? Bem, neste artigo vou te mostrar como excluir todos usuários do blog WordPress através da criação de um script PHP e também outras idéias e filtros relacionados aos usuários para você poder definir quais usuários quer excluir e quais você quer poupar. Continue lendo…

Excluir todos usuários do Blog WordPress: Motivos

O motivo que pode levar você a querer excluir todos, ou pelo menos vários usuários do blog WordPress, podem ser vários. Por exemplo, um motivo pode ser que você deixou seu blog com cadastro liberado e vários spammers fizeram cadastros automatizados. Outro motivo, pode ser que você queira transferir todos os posts (artigos) para o administrador e depois queira excluir os outros autores ou colaboradores. Bem, os motivos podem ser vários, mas fique tranquilo que a seguir vou mostrar vários filtros que podem ser utilizados para excluir usuários específicos.

Excluir todos usuários do Blog WordPress: Criar Script

Antes de continuar, é interessante que você faça backup de seu blog WordPress, veja como fazer isso nesse outro artigo: Fazer Backup Blog WordPress. Note que neste artigo vou sugerir a idéia de criação de um script PHP para que você possa estar executando os comandos sql no banco de dados, contudo, também é possível executar muitos dos comandos diretamente pelo phpMyAdmin, não vou falar disso aqui neste artigo pois já falei neste outro artigo aqui: Excluir todas as tags do Blog WordPress

Crie um arquivo PHP com algum nome sugestido, exemplo: delete.php. Abra este arquivo e inclua o seguinte código:

<?php

require("wp-blog-header.php");

?>

Com isto, você inclui o cabeçalho do CMS WordPress, e a partir daí, terá acesso á várias funções do mesmo, inclusive acesso ao $wpdb para poder executar comandos sql facilmente. Antes de fazermos a exclusão, vejamos algumas idéias de selects:

<?php
require("wp-blog-header.php");

$myrows = $wpdb->get_results( "select um.user_id, um.meta_value from wp_usermeta um where um.meta_key='wp_capabilities' and um.meta_value like '%contributor%'");

foreach($myrows as $row){
	
	echo $row->user_id . "<br>";
        echo "<pre>";
	print_r(unserialize($row->meta_value));
	echo "</pre>";

}
?>

No caso, após colocar o código sugerido, salve o arquivo e envie para o diretório principal onde o teu blog foi instalado (mesmo diretório onde está o arquivo wp-config.php). Agora, basta abrir o url http://seublog/delete.php (substituindo seublog pelo url do teu blog) para que o script seja executado.

Neste caso acima, o script irá selecionar todos os usuários “Contribuidores” do teu blog e irá imprimir na tela o ID o usuário e a capacidade dele (no caso contributor). É interessante antes de utilizar o comando delete para excluir os usuários, fazer um teste com o select para saber se você estará excluindo os usuários corretos.

No exemplo acima, você pegou o ID de todos os usuários contribuidores, então agora basta excluí-los com o comando delete. Certo? Errado! Um usuário pode possuir referências no blog, por exemplo, um usuário pode possuir posts (artigos) e comentários. Então antes de excluir o usuário, é preciso decidir o que você irá fazer com os posts que ele é autor. Você pode transferir o posts para outro usuário ou excluí-los. Veja abaixo as idéias:

Modificando o autor do Post

No exemplo a seguir, vou modificar o autor para o Administrador, mas você pode colocar o ID do usuário que você desejar. Veja o código:

<?php

require("wp-blog-header.php");

$myrows = $wpdb->get_results( "select um.user_id, um.meta_value from wp_usermeta um where um.meta_key='wp_capabilities' and um.meta_value like '%contributor%'");

foreach($myrows as $row){
	
	$wpdb->query("update wp_posts po set po.post_author=1 where post_author=" . $row->user_id );

}

?>

No caso, onde está post_author=1, o número 1 define o ID do novo autor, que no caso do WordPress, o usuário com ID igual a 1 é sempre o Administrador principal do Blog, então estou transferindo todos os posts que possuem autores contribuidores para o administrador do blog.

Excluir todos usuários Contribuidores

A tabela principal que armazena os usuários é a wp_users, mas existem referências dos usuários na tabela wp_usermeta, então, antes de excluir o usuário, você precisa excluir essas referências. Veja como ficaria o código completo abaixo:

<?php

require("wp-blog-header.php");

$myrows = $wpdb->get_results( "select um.user_id, um.meta_value from wp_usermeta um where um.meta_key='wp_capabilities' and um.meta_value like '%contributor%'");

foreach($myrows as $row){
	
	$wpdb->query("update wp_posts po set po.post_author=1 where post_author=" . $row->user_id );

        $wpdb->query("delete from wp_usermeta where user_id=" . $row->user_id );
	
	$wpdb->query("delete from wp_users where ID=" . $row->user_id );

}

?>

Resumindo:
a) primeiro executo um select que retorna todos os usuários que são contribuidores
b) depois transfiro os posts dos usuários contribuidores para o administrador do blog
c) depois excluo todas as referências dos usuários contribuidores na tabela wp_usermeta
d) por fim, excluo os usuários contribuidores da tabela wp_users.

Note que eu excluí os usuários contribuidores, mas você pode excluir qualquer tipo de usuário apenas substituindo o ‘%contributor%’ por uma das classes abaixo:

contributor – contribuidor
subscriber – inscritos
editor – editores
author – autores
administrator – administradores

Excluir todos usuários do Blog WordPress: Menos o Admin Principal

Como já dito, o administrador principal possui o ID igual a 1, então basta montar o select da seguinte forma:

<?php

require("wp-blog-header.php");

$myrows = $wpdb->get_results( "SELECT u.ID
FROM wp_users u
WHERE u.id <> 1
");

foreach($myrows as $row){

    $wpdb->query("delete from wp_usermeta where user_id=" . $row->ID );
	
    $wpdb->query("delete from wp_users where ID=" . $row->ID );

}

?>

No caso, quando coloquei isso “u.ID != 1”, estou dizendo ao comando que é para selecionar qualquer usuário que não tenha o ID igual a 1, ou seja, qualquer usuário menos o administrador principal.

Mas como ficaria o script se eu quisesse excluir todos os usuários que não possuem post (artigo) no blog? Bem, veja o código a seguir…

Excluir todos usuários do Blog WordPress: Menos aqueles que possuem posts

Veja o código, comento depois:

<?php
require("wp-blog-header.php");

$myrows = $wpdb->get_results( "SELECT u.ID, count( p.ID ) AS posts
FROM wp_users u
LEFT JOIN wp_posts p ON p.post_author = u.ID
WHERE u.id <> 1
GROUP BY u.ID
HAVING (
posts =0
)");

foreach($myrows as $row){

    $wpdb->query("delete from wp_usermeta where user_id=" . $row->ID );
	
    $wpdb->query("delete from wp_users where ID=" . $row->ID );

}

?>

Aí, no select, selecionei todos os usuários da tabela wp_users e a quantia de posts de cada um unindo com a tabela wp_posts, porém faço um left join, ou seja, mesmo que não haja posts, o usuário será selecionado. Também incluo a cláusula where id <> 1, que define que é para deixar o administrador geral do blog de fora. Seguindo, verifico com a cláusula having se a quantidade de posts é igual a 0 (nenhum post).

Em suma o comando acima irá retornar todos os usuários que não possuem nenhum post em seu blog WordPress, deixando o administrador principal de fora. Após isso, limpo a tabela wp_usermeta e excluo o usuário definitivamente da tabela wp_users. Fácil, não?

Se você quiser poupar alguns usuários do teu blog, é simples, basta pegar os IDs deles, e modificar isso “WHERE u.id <> 1″, invés disso, use o seguinte:

WHERE u.id NOT in(1,22,159,1205)

Neste caso, estou poupando os usuários com ID igual a 1,22,159,1205, então substitua esses valores pelos ids dos usuários que você quer poupar em seu blog.

Conclusão

Criar um script para interagir com o banco de dados do teu blog wordpress é muito fácil, basta incluir o arquivo wp-blog-header.php e você já terá acesso à várias funções, classes e objetos do CMS. Com isso, basta montar o sql correto para poder modificar seu banco de dados, lembrando-se sempre de fazer uma cópia de segurança (backup), pois você pode acabar excluindo o que não queria devido a algum erro na montagem do comando sql. Caso vocÊ ficou com alguma dúvida sobre este artigo, não hesite em deixar seu comentário.

Até o próximo artigo aqui no Profissionais Web

Uma resposta a Excluir todos usuários do Blog WordPress

  • ainda não precisei excluir usuarios, mas é interessante saber como fazer se um dia precisar. Vou favoritar aqui.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *