Como banir um usuário WordPress

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


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:

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 opção de meta do 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
* @ desde 1.0
* @return void
* /
função rc_admin_init () {

// Editar perfil do usuário
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 precisamos criar agora. Esta função adicionará uma caixa de seleção à página de perfil dos usuários.

/ **
* Adiciona caixa de seleção personalizada à página de edição do usuário
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_edit_user_profile () {
if (! current_user_can ('edit_users')) {
Retorna;
}

global $ user_id;

// O usuário não pode se desativar
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
Retorna;
}

// Verifique se ativado
$ verificado = verificado (get_user_option ('rc_banned', $ user_id, false));

// Exibir caixa de seleção
eco '
Banir usuário
'; }

Agora precisamos ter a função que salvará no banco de dados o valor da caixa de seleção:

/ **
* Salvar caixa de seleção personalizada
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_edit_user_profile_update () {

if (! current_user_can ('edit_users')) {
Retorna;
}

global $ user_id;

// O usuário não pode se desativar
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
if ($ current_user_id == $ user_id) {
Retorna;
}

// Bloquear
if (isset ($ _POST ['rc_ban']) && $ _POST ['rc_ban'] = 'on') {
rc_ban_user ($ user_id);
} else {// Desbloquear
rc_unban_user ($ user_id);
}

}

Como você pode ver, essa nova função usa duas outras funções: rc_ban_users () e rc_unban_users (). Seus nomes são bem explícitos, o primeiro armazenará no banco de dados o fato de um usuário ser banido, o segundo desbloqueará os 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 e, se não, precisamos armazenar o valor. Essa é a razão pela qual chamo uma função que descreverei mais tarde: rc_is_user_banned ():

/ **
* Banir usuário
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Atualizar o status
if (! $ old_status) {
update_user_option ($ user_id, 'rc_banned', verdadeiro, falso);
}
}

Etapa 4: Cancelar a proibição de usuários

A função a seguir é o oposto da que acabamos de criar: temos que dar a capacidade de "cancelar a proibição" de usuários:

/ **
* Cancelar banimento do usuário
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Atualizar o status
if ($ old_status) {
update_user_option ($ user_id, 'rc_banned', falso, falso);
}
}

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 é banido ou não. Vamos criar:

/ **
* Verifica se um usuário já foi banido
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_is_user_banned ($ user_id) {
return get_user_option ('rc_banned', $ user_id, false);
}

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

No 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: Evite que usuários banidos façam login

Para fazer isso, precisamos usar um filtro padrão do WordPress chamado “wp_authenticate_user”. Nesse filtro, conectaremos uma função chamada "rc_authenticate_user ()". Esta função usará o Classe WP_Error.

/ **
* Verifique se o usuário está bloqueado durante o processo de login
*
* @access public
* @ desde 1.0
* @return void
* /
função rc_authenticate_user ($ user) {

if (is_wp_error ($ user)) {
retornar $ usuário;
}

// Retorna o erro se a conta do usuário for banida
$ banned = get_user_option ('rc_banned', $ user-> ID, false);
if ($ banido) {
retornar novo WP_Error ('rc_banned', __ ('ERRO: Esta conta de usuário está desativada. ',' Rc '));
}

retornar $ usuário;
}

Agora, basta adicionar o filtro:

add_filter ('wp_authenticate_user', 'rc_authenticate_user', 1);

Conclusão

Criamos um plug-in 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 é banido ou não. E finalmente conectamos uma função ao filtro "wp_authenticate_user" usando a classe padrão WP_Error WordPress.

Se você gostou deste tutorial, adorará a versão premium deste plugin: Gerenciador de acesso de usuários.

Download do código completo no Github

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map