Redirigir wp-login.php a URL personalizada

Php marzo 10, 2026

La URL /wp-login.php es conocida por todos los bots de fuerza bruta. Cambiarla por una URL personalizada es una medida de seguridad básica que reduce significativamente los intentos de acceso automatizados. Este snippet intercepta las peticiones a la URL estándar y actualiza todos los enlaces internos de WordPress para que apunten a la nueva ruta.

Casos de uso: seguridad básica en cualquier instalación de WordPress, especialmente en sitios sin límite de intentos de login o sin 2FA.

<?php
add_action( 'init', 'mi_ocultar_login' );
function mi_ocultar_login() {
    $request = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
    if ( '/wp-login.php' === $request && ! is_user_logged_in() ) {
        wp_redirect( home_url( '/404' ), 302 );
        exit;
    }
}

add_filter( 'login_url', 'mi_login_url', 10, 3 );
function mi_login_url( $login_url, $redirect, $force_reauth ) {
    return home_url( '/mi-acceso' );
}

add_filter( 'logout_url', 'mi_logout_url' );
function mi_logout_url( $logout_url ) {
    return str_replace( '/wp-login.php', '/mi-acceso', $logout_url );
}

¿Qué hace cada parte?

  • parse_url( REQUEST_URI ): extrae solo la ruta de la URL actual, ignorando query strings como ?redirect_to=.... Esto evita falsos positivos.
  • ! is_user_logged_in(): solo redirige si el usuario no está ya autenticado, para no romper el proceso de login/logout.
  • wp_redirect() + exit: redirige y detiene la ejecución inmediatamente. Sin exit, PHP continuaría ejecutando código después del redirect.
  • 302: redirección temporal. Usa 301 solo si quieres que los buscadores indexen la nueva URL (no recomendable para el login).
  • login_url filter: hace que wp_login_url() devuelva la URL personalizada en todos los contextos — enlaces de logout, mensajes de «debes estar logueado», etc.
  • logout_url filter: actualiza la URL de cierre de sesión para que use la nueva ruta en lugar de la original.