Redirigir wp-login.php a otra página
Me gustaría redirigir la página wp-login.php a la página /login.
Así cuando un usuario hace clic en un enlace como este <a href="/wp-login.php">iniciar sesión</a>, WordPress lo redirigirá a /register.
Encontré esta función y la modifiqué:
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if (( 'wp-login.php' == $pagenow ) && (!is_user_logged_in())) {
wp_redirect('/login');
exit();
}
No soy muy bueno con la programación en WordPress.
La redirección funciona bien, pero la autenticación parece estar rota.
Cuando ingreso mi usuario/contraseña, la misma página (/login) se recarga sin autenticarme.
¿Alguna sugerencia para arreglar la función de redirección?
Si solo te preocupan los enlaces de inicio de sesión mostrados en tus páginas, deberías poder modificar la URL enganchando el filtro login_url. Esto no redirigirá a un usuario que escriba http://MISITIO/wp-login.php directamente en su navegador, pero debería afectar a los enlaces de inicio de sesión mostrados en todo tu sitio.
Este es el código de ejemplo de la página del Codex de login_url:
add_filter( 'login_url', 'mi_pagina_de_login', 10, 2 );
function mi_pagina_de_login( $login_url, $redirect ) {
return home_url( '/mi-pagina-de-login/?redirect_to=' . $redirect );
}
1. Modifica tu archivo .htaccess – agrega esta línea después de la regla de reescritura index.php:
RewriteRule ^index\.php$ – [L]<br />
RewriteRule ^rutasecreta$ wp-login.php [L,NC,QSA]
donde rutasecreta es la ruta hacia tu panel de administración.
2. Modifica la función login_header en el archivo wp-login.php – agrega este código justo antes de la línea 59 (donde comienza la etiqueta HTML doctype, para evitar errores de envío de cabeceras):
<?php $uri = $_SERVER['REQUEST_URI']; if(stripos($uri, ‘wp-login’) or stripos($uri, ‘wp-admin’) && !stripos($GLOBALS["HTTP_COOKIE"], ‘wordpress_logged_in’)) { header("Location: ".get_site_url().'/rutasecreta' ); exit(); } ?>
En realidad ya tengo un plugin de código abierto que hace esto:
https://github.com/tripflex/wp-login-flow
Fue creado para requerir que los usuarios verifiquen sus correos electrónicos, pero puedes desactivar esa característica y solo usar la función de reescritura que está funcional en la última versión del repositorio de WordPress (1.0.0).
Puedes revisar el código para ver cómo manejo las reescrituras:
https://github.com/tripflex/wp-login-flow/blob/master/classes/rewrite.php#L312
Actualmente estoy trabajando en esto para hacer algunas actualizaciones y correcciones importantes, pero por ahora la versión 1.0.0 funciona perfectamente para las reescrituras. Disfrútalo :)
Si vas a crear una página de inicio de sesión personalizada en tu dirección /login, entonces crea una reescritura:
function restrict_admin() {
if ( ! current_user_can( 'manage_options' ) && '/wp-admin/admin-ajax.php' != $_SERVER['PHP_SELF'] ) {
wp_redirect( site_url() );
}
}
add_action( 'admin_init', 'restrict_admin', 1 );
Este código verificará si el usuario es un administrador y, si no lo es, WordPress lo redirigirá de vuelta a la página de inicio del sitio web.
Crea también una plantilla lateral para tu inicio de sesión personalizado y utiliza los valores predeterminados de inicio de sesión de WordPress dentro de la plantilla:
$args = array( 'redirect' => site_url( $_SERVER['REQUEST_URI'] ) );
wp_login_form( $args );
También puedes cambiar la dirección de redirección para la página de inicio de sesión. Pero también es útil que verifiques los errores de inicio de sesión y quizás agregues código para la redirección correcta después de un inicio de sesión fallido. Para estos trabajos utiliza los hooks wp_login_failed y authenticate.