bloquear usuarios problemáticos en WordPress-5

Cómo bloquear usuarios problemáticos en WordPress de forma efectiva

bloquear usuarios problemáticos en WordPress

Si necesitas bloquear usuarios problemáticos en WordPress, este tutorial te mostrará cómo hacerlo de manera efectiva. Aprenderás a implementar un sistema que no solo impide el acceso a usuarios bloqueados, sino que también los expulsa si ya han iniciado sesión.

Además, contarás con herramientas en el panel de administración para gestionar bloqueos con facilidad: visualizar el estado de cada usuario, rastrear bloqueos anteriores y aplicar restricciones con un solo clic. Todo esto sin comprometer la seguridad y flexibilidad de tu sitio web.

A continuación, te explicamos cómo funciona el código, el rol de cada parte y cómo personalizarlo según tus necesidades.

bloquear usuarios problemáticos en WordPress-2

¿Cómo funciona el código para bloquear usuarios problemáticos en WordPress?

Este sistema está diseñado para evitar el acceso de usuarios bloqueados y facilitar su gestión desde el panel de administración de WordPress. A continuación, analizamos sus principales componentes:

1. Agregar la columna «Estado de Bloqueo» en la lista de usuarios

El código personaliza el administrador de usuarios añadiendo una nueva columna llamada «Estado de Bloqueo», que permite visualizar:

  • Si un usuario está activo o bloqueado.
  • La fecha en que se aplicó el bloqueo, en caso de estar restringido.
  • El historial de bloqueos, mostrando cuántas veces ha sido sancionado.

Para lograr esto, se utilizan las siguientes funciones clave:

  • add_block_user_column: Agrega la nueva columna en la tabla de usuarios.
  • fill_block_user_column: Rellena la columna con información dinámica sobre cada usuario.

Este sistema optimiza la administración y permite tomar decisiones rápidas para bloquear usuarios problemáticos en WordPress de manera eficiente.

2. Bloqueo total: Evita que los usuarios problemáticos inicien sesión

Para bloquear usuarios problemáticos en WordPress de manera efectiva, es fundamental impedir que accedan a su cuenta. Aquí es donde entra en acción la función clave:

  • prevent_blocked_user_login: Al detectar un intento de inicio de sesión, verifica en los metadatos si el usuario está bloqueado. Si es así, muestra un mensaje de error y le impide acceder al sitio.

Implementar este bloqueo total refuerza la seguridad y evita que usuarios no deseados sigan interactuando con tu web.

bloquear usuarios problemáticos en WordPress-3

3. Expulsión inmediata de usuarios bloqueados

Si un usuario es bloqueado mientras sigue conectado, el sistema actúa de inmediato:

  • kick_out_blocked_users: Detecta si un usuario bloqueado está activo en la sesión y lo expulsa al instante, redirigiéndolo a la página de inicio.

Esto evita cualquier brecha de seguridad y garantiza que los usuarios restringidos no puedan seguir navegando en tu sitio.

4. Gestión rápida: Bloquea o desbloquea usuarios con un clic

Desde el panel de administración de WordPress, puedes bloquear usuarios problemáticos en WordPress o restablecer su acceso de forma sencilla:

  • add_block_user_action_link: Agrega enlaces directos de “Bloquear” o “Desbloquear” en la lista de usuarios.
  • process_user_block_unblock_links: Procesa la acción elegida y actualiza el estado del usuario en tiempo real.

Además, este sistema protege a los administradores para evitar bloqueos accidentales en cuentas clave.

5. Registro detallado de bloqueos

Cada bloqueo queda registrado con información clave:

  • Fecha en la que el usuario fue bloqueado.
  • Historial de bloqueos previos.

Esto te permite llevar un control completo sobre los usuarios problemáticos en tu sitio.

¿Por qué implementar este sistema?

Este método es ideal para sitios que requieren un mayor control sobre sus usuarios, como:

Foros: Para manejar perfiles conflictivos.
Tiendas en línea: Para prevenir fraudes y cuentas sospechosas.
Comunidades privadas: Donde el acceso restringido es clave.
Membership Sites: Para restringir el acceso a usuarios con pagos pendientes.

Para activar este sistema, solo necesitas agregar el siguiente código en el archivo functions.php de tu tema hijo o utilizar un plugin como Code Snippets.

Cómo instalar y usar Code Snippets

  1. Instalar el plugin
    • Accede a tu panel de WordPress y ve a Plugins > Añadir nuevo.
    • En el buscador, escribe Code Snippets.
    • Instala y activa el plugin desarrollado por Code Snippets Pro.
  2. Añadir un nuevo snippet
    • Una vez activado, dirígete a Fragmentos de código en el menú de administración.
    • Haz clic en Añadir nuevo.
    • Asigna un título al snippet (por ejemplo, Bloqueo de usuarios problemáticos).
  3. Insertar el código
    • Copia y pega el código en el editor de Code Snippets.
    • Asegúrate de seleccionar la opción Ejecutar en todas partes para que el código funcione correctamente.
  4. Guardar y activar
    • Haz clic en Guardar cambios y activar.
    • Ahora, el sistema de bloqueo estará funcionando sin necesidad de modificar archivos del tema.

Este método facilita la gestión del código y evita problemas al actualizar tu tema o cambiar de plantilla en WordPress.

bloquear usuarios problemáticos en WordPress-4
// Agregar una nueva columna a la tabla de usuarios en el administrador

add_filter('manage_users_columns', 'add_block_user_column');

function add_block_user_column($columns) {

    $columns['block_user'] = 'Estado de Bloqueo';

    return $columns;

}



// Mostrar el estado del bloqueo en la columna

add_action('manage_users_custom_column', 'fill_block_user_column', 10, 3);

function fill_block_user_column($value, $column_name, $user_id) {

    if ('block_user' === $column_name) {

        $is_blocked = get_user_meta($user_id, 'is_blocked', true);

        $block_count = get_user_meta($user_id, 'block_count', true) ?: 0;

        $block_date = get_user_meta($user_id, 'block_date', true);



        // Formatear la fecha en día/mes/año

        $formatted_date = $block_date ? date_i18n('d/m/Y', strtotime($block_date)) : '';



        if ($is_blocked) {

            return "<strong style='color: red;'>Bloqueado</strong><br>

                    Fecha: $formatted_date<br>

                    Veces bloqueado: $block_count";

        } else {

            $block_info = $block_count > 0 ? "<br><span style='color: #666;'>Veces bloqueado: $block_count</span>" : '';

            return "<strong style='color: green;'>Activo</strong>$block_info";

        }

    }

    return $value;

}







// Impedir que los usuarios bloqueados inicien sesión

add_action('wp_authenticate_user', 'prevent_blocked_user_login', 10, 2);

function prevent_blocked_user_login($user) {

    if (get_user_meta($user->ID, 'is_blocked', true)) {

        return new WP_Error('blocked_user', __('Tu cuenta está bloqueada. Contacta al administrador.'));

    }

    return $user;

}



// Impedir que los usuarios bloqueados naveguen mientras están conectados

add_action('init', 'kick_out_blocked_users');

function kick_out_blocked_users() {

    if (is_user_logged_in()) {

        $user_id = get_current_user_id();

        if (get_user_meta($user_id, 'is_blocked', true)) {

            wp_logout(); // Desconecta al usuario inmediatamente

            wp_redirect(home_url()); // Redirige al inicio

            exit;

        }

    }

}





// Modificar los enlaces debajo del nombre del usuario

add_filter('user_row_actions', 'add_block_user_action_link', 10, 2);

function add_block_user_action_link($actions, $user) {

    // Solo mostrar para usuarios no administradores

    if (!current_user_can('manage_options') || in_array('administrator', $user->roles)) {

        return $actions;

    }



    $is_blocked = get_user_meta($user->ID, 'is_blocked', true);

    $block_count = get_user_meta($user->ID, 'block_count', true) ?: 0;



    // Agregar enlace de Bloquear/Desbloquear según el estado del usuario

    if ($is_blocked) {

        $actions['unblock_user'] = '<a href="' . esc_url(admin_url('users.php?action=unblock_user&user_id=' . $user->ID)) . '">Desbloquear</a>';

    } else {

        $actions['block_user'] = '<a href="' . esc_url(admin_url('users.php?action=block_user&user_id=' . $user->ID)) . '">Bloquear</a>';

    }



  



    return $actions;

}



// Procesar las acciones de bloquear/desbloquear desde los enlaces

add_action('admin_init', 'process_user_block_unblock_links');

function process_user_block_unblock_links() {

    if (!current_user_can('manage_options') || empty($_GET['action']) || empty($_GET['user_id'])) {

        return;

    }



    $action = sanitize_text_field($_GET['action']);

    $user_id = intval($_GET['user_id']);



    // Evitar bloquear/desbloquear administradores

    $user = get_userdata($user_id);

    if (in_array('administrator', $user->roles)) {

        wp_die(__('No puedes bloquear a un administrador.', 'text-domain'));

    }



    if ($action === 'block_user') {

        update_user_meta($user_id, 'is_blocked', true);

        update_user_meta($user_id, 'block_date', current_time('mysql'));

        $block_count = get_user_meta($user_id, 'block_count', true) ?: 0;

        update_user_meta($user_id, 'block_count', $block_count + 1);



        // Desconectar al usuario si está bloqueado

        if (function_exists('wp_destroy_user_sessions')) {

            wp_destroy_user_sessions($user_id);

        }

    } elseif ($action === 'unblock_user') {

        delete_user_meta($user_id, 'is_blocked');

        delete_user_meta($user_id, 'block_date');

    }



    // Redirigir de vuelta a la lista de usuarios

    wp_redirect(admin_url('users.php'));

    exit;

}

Resumen:

Añadir un sistema para bloquear usuarios problemáticos en WordPress no solo refuerza la seguridad de tu sitio, sino que también te brinda un mayor control sobre el acceso y la interacción de los usuarios. Gracias a las funciones explicadas, podrás administrar fácilmente desde el panel de WordPress, registrar datos clave y tomar medidas rápidas ante cualquier inconveniente.

Si estás profundizando tus conocimientos en el mundo WordPress y necesitas un servicio de hosting que se adapte a tus necesidades, te invitamos a conocer los planes de WordPress Hosting que DonWeb tiene para ofrecerte.

Santiago Molina
Santiago Molina

Ingeniero Industrial / Especialista en marketing / Programador web

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.