Cómo podemos permitir al administrador bloquear usuarios
Esta semana veremos cómo podemos permitir al administrador bloquear usuarios.
Imagínate que quieres bloquear a un usuario de tu WordPress, y además de impedirle entrar en el sistema, también mostrarle un mensaje que le diga que esa cuenta está bloqueada.
La diferencia entre esta forma de hacerlo y eliminarlo directamente desde los usuarios, es que, con este código que veremos hoy, crearemos una nueva opción en la parte inferior del perfil de cada usuario del sitio, que nos permitirá bloquearlo, pero no eliminarlo.
Código que vamos a utilizar para permitir al administrador bloquear usuarios
Como hemos dicho, vamos a utilizar un código con el que podremos eliminar a cada usuario desde nuestro propio perfil. Pero esta opción solo estará disponible para el administrador del sitio, así el propio usuario u otros usuarios de tu WordPress, no podrán bloquear a usuarios de forma indiscriminada.
El código que vamos a usar es el siguiente:
// mostrar al administrador la casilla de verificación
add_action( ‘edit_user_profile’, ‘ban_user_profile_fields’ );
function ban_user_profile_fields( $user ) {
global $current_user;
if ( current_user_can( ‘edit_user’ ) && $user->ID != $current_user->ID ){
$status = get_the_author_meta( ‘ban_user’, $user->ID );
?>
<h3><?php _e(“Estado de la cuenta”, “blank”); ?></h3>
<table class=”form-table”>
<tr>
<th>Bloquear Usuario</th>
<td><label for=”ban_user”><input type=”checkbox” name=”ban_user” id=”ban_user” value=”1″ <?php if($status == 1){ echo ‘ checked’; } ?> /></label>
<span class=”description”><?php _e(“Si activas esta opción, bloquearás a este usuario.”); ?></span>
</td>
</tr>
</table>
<?php
}
}
// Guardar perfil del usuario, no eliminarlo
add_action( ‘edit_user_profile_update’, ‘save_extra_user_profile_fields’ );
function save_extra_user_profile_fields( $user_id ){
if ( !current_user_can( ‘edit_user’, $user_id ) ) { return false; }
update_usermeta( $user_id, ‘ban_user’, $_POST[‘ban_user’] );
}
// Comprobar si el usuario realmente está bloqueado
add_filter( ‘wp_authenticate_user’, ‘login_ban_status’, 1 );
function login_ban_status($user) {
if ( is_wp_error( $user ) ) { return $user; }
$status = get_user_meta( $user->ID, ‘ban_user’, ‘true’ );
if($status == 1){
return new WP_Error( ‘banned’, __(‘<strong>ERROR</strong>: No puedes acceder. Esta cuenta ha sido bloqueada.’, ‘banned’) );
}
return $user;
}
Qué hace este código
Como puedes ver, el código es sencillo de entender. En primer lugar, creamos la casilla de verificación que utilizará la función ban_user_profile_fields, esta función es la encargada de banear, es decir, de bloquear usuarios.
A continuación creamos la estructura que mostrará la opción de bloquear.
Después, utilizamos la función save_extra_user_profile_fields que nos permitirá guardar los datos del usuario, en lugar de eliminarlos.
Lo último que haremos es comprobar si realmente el usuario se ha bloqueado, y también, mostrar el error que le aparecerá a dicho usuario cuando intente iniciar sesión con sus datos.
El resultado es el siguiente:

Dónde tenemos que colocar este código
Como ya sabrás, existen varias formas para introducir este código en nuestros sistema, pero yo siempre te aconsejo utilizar un plugin de snippets o un plugin de funciones.
Y por último, nos falta saber cómo se le mostrará al usuario el aviso de bloqueo.
