fbpx

Bem vindo ao
Blog da FULL.

Aprenda, crie e cresça seu negócio na internet.

Encontre conteúdos, dicas, tutoriais e novidades sobre as principais ferramentas Wordpress

Como banir um usuário do WordPress

Você está em:

Como banir um usuário do WordPress

Me pediram alguns dias atrás para criar um sistema que baniria um usuário do WordPress de uma instalação. Então eu criei um plugin simples e queria compartilhar com vocês o básico desse plugin. Neste tutorial, abordaremos os filtros, ações, gerenciamento de colunas de usuários do WordPress e mais algumas coisas interessantes.

Etapa 1: criar o plug-in

Mais uma vez, aqui é muito complicado, tudo o que você precisa fazer é criar uma nova pasta com “wp-content/plugins” chamada “ban-users”. Nesta pasta, crie um novo arquivo chamado “ban-users.php”, abra-o e cole este código:

<?php

/*

Plugin Name: Ban Users

Plugin URI: http://www.remicorson.com

Description: Allows you to ban users

Author: Remi Corson

Version: 1.0

Author URI: http://www.remicorson.com

*/

Etapa 2: adicionar uma caixa de seleção na página de perfil dos usuários

A primeira coisa que precisamos fazer é adicionar uma caixa de seleção em cada página de edição de perfil de usuário. Quando você marcar esta caixa de seleção, ela armazenará uma meta-opção de usuário que indicará que o usuário não tem mais permissão para fazer login no seu site.

Aqui está o código:

/**

 * Admin init

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_admin_init(){

// Edit user profile

add_action( ‘edit_user_profile’, ‘rc_edit_user_profile’ );

add_action( ‘edit_user_profile_update’, ‘rc_edit_user_profile_update’ );

}

add_action(‘admin_init’, ‘rc_admin_init’ );

Este código está simplesmente criando uma chamada para uma função que temos que criar agora. Esta função adicionará uma caixa de seleção à página de perfil do usuário.

/**

 * Adds custom checkbox to user edition page

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_edit_user_profile() {

if ( !current_user_can( ‘edit_users’ ) ) {

return;

}

global $user_id;

// User cannot disable itself

$current_user = wp_get_current_user();

$current_user_id = $current_user->ID;

if ( $current_user_id == $user_id ) {

return;

}

// Check if enabled

$checked = checked( get_user_option( ‘rc_banned’, $user_id, false ) );

// Display checkbox

echo ‘<table class=”form-table”>

<tr>

<th scope=”row”>Ban User</th>

<td>

<label for=”rc_ban”>

<input name=”rc_ban” type=”checkbox” id=”rc_ban” ‘. $checked .’ />Ban this user</label>

</td>

</tr>

</table>’;

}

Agora precisamos ter a função que salvará no banco de dados o valor do checkbox:

/**

 * Save custom checkbox

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_edit_user_profile_update() {

if ( !current_user_can( ‘edit_users’ ) ) {

return;

}

global $user_id;

// User cannot disable itself

$current_user    = wp_get_current_user();

$current_user_id = $current_user->ID;

if ( $current_user_id == $user_id ) {

return;

}

// Lock

if( isset( $_POST[‘rc_ban’] ) && $_POST[‘rc_ban’] = ‘on’ ) {

rc_ban_user( $user_id );

} else { // Unlock

rc_unban_user( $user_id );

}

}

Como você pode ver esta nova função usa duas outras funções: rc_ban_users() e rc_unban_users(). Seus nomes são bastante explícitos, o primeiro irá armazenar no banco de dados o fato de um usuário ser banido, o segundo irá desbloquear usuários.

Etapa 3: banir usuários

Agora é hora de criar a função rc_ban_users(). Nesta função precisamos verificar se um valor já está armazenado, caso contrário precisamos armazenar o valor. Essa é a razão pela qual eu chamo uma função que descreverei mais tarde: rc_is_user_banned():

/**

 * Ban user

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_ban_user( $user_id ) {

$old_status = rc_is_user_banned( $user_id );

// Update status

if ( !$old_status ) {

update_user_option( $user_id, ‘rc_banned’, true, false );

}

}

Etapa 4: desbanir usuários

A função a seguir é o oposto da que acabamos de criar: temos que dar a possibilidade de “desbanir” usuários:

/**

 * Un-ban user

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_unban_user( $user_id ) {

$old_status = rc_is_user_banned( $user_id );

// Update status

if ( $old_status ) {

update_user_option( $user_id, ‘rc_banned’, false, false );

}

}

Etapa 5: o usuário é banido?

Vimos em rc_ban_users() e rc_unban_users() que usamos uma função chamada rc_is_user_banned() para verificar se um usuário está banido ou não. Vamos criar:

/**

 * Checks if a user is already banned

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_is_user_banned( $user_id ) {

return get_user_option( ‘rc_banned’, $user_id, false );

}

Basicamente, esta função simplesmente retorna o valor da opção salva em rc_ban_users().

Neste momento, temos uma nova caixa de seleção na página de edição do usuário que deve ser assim:

ban_users_1

O último passo é conectar uma função ao formulário de login para evitar que usuários banidos façam login.

Etapa 5: evitar usuários banidos para fazer login

Para isso, precisamos usar um filtro padrão do WordPress chamado “wp_authenticate_user”. Para este filtro vamos ligar uma função chamada “rc_authenticate_user()”. Esta função usará a classe WP_Error .

/**

 * Check if user is locked while login process

 *

 * @access      public

 * @since       1.0 

 * @return      void

*/

function rc_authenticate_user( $user ) {

if ( is_wp_error( $user ) ) {

return $user;

}

// Return error if user account is banned

$banned = get_user_option( ‘rc_banned’, $user->ID, false );

if ( $banned ) {

return new WP_Error( ‘rc_banned’, __(‘<strong>ERROR</strong>: This user account is disabled.’, ‘rc’) );

}

return $user;

}

Agora, só precisamos adicionar o filtro:

add_filter( ‘wp_authenticate_user’, ‘rc_authenticate_user’, 1 );


Criamos um plugin que adiciona uma caixa de seleção à página de edição do perfil do usuário. Usamos uma segunda função para armazenar o valor na caixa de seleção e criamos uma função para banir um usuário do WordPress e outra para desbloquear um usuário. Também criamos uma pequena função para verificar se um usuário está banido ou não. E finalmente conectamos uma função ao filtro “wp_authenticate_user” usando a classe padrão WP_Error do WordPress.

BAIXE O CÓDIGO COMPLETO NO GITHUB

Aprenda com a FULL.

Junte-se a mais de 50 mil pessoas que recebem em primeira mão as principais ferramentas e tecnologia para desenvolvimento web

Meu carrinho
🎁 Faltam R$100,00 para liberar a Black da FULL
Seu carrinho está vazio.

Parece que você não adicionou nada ao seu carrinho =(