Saltar al contenido

Wordpress – ¿Cómo puedo redirigir al usuario después de ingresar una contraseña incorrecta?

Elisa, miembro de este gran equipo, nos hizo el favor de redactar esta crónica ya que controla muy bien el tema.

Solución:

Vine aquí desde Google. Pero la respuesta no me satisfizo. Estuve buscando por un tiempo y encontré una mejor solución.

Agregue esto a su functions.php:

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // hook failed login

function my_front_end_login_fail( $username ) 
   $referrer = $_SERVER['HTTP_REFERER'];  // where did the post submission come from?
   // if there's a valid referrer, and it's not the default log-in screen
   if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) 
      wp_redirect( $referrer . '?login=failed' );  // let's append some information (login=failed) to the URL for the theme to use
      exit;
   

El método actual que estoy usando para lidiar con todos los problemas descritos aquí funciona muy bien incluso con un nombre de usuario / contraseña en blanco y no se basa en javascript (aunque el js podría ser bueno junto con esto).

add_action( 'wp_login_failed', 'custom_login_failed' );
function custom_login_failed( $username )

    $referrer = wp_get_referer();

    if ( $referrer && ! strstr($referrer, 'wp-login') && ! strstr($referrer,'wp-admin') )
    
        wp_redirect( add_query_arg('login', 'failed', $referrer) );
        exit;
    

los key ¿Es este filtro para cambiar cómo se trata un nombre de usuario / contraseña en blanco?

add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
function custom_authenticate_username_password( $user, $username, $password )
 empty($password) )
    
        $error = new WP_Error();
        $user  = new WP_Error('authentication_failed', __('ERROR: Invalid username or incorrect password.'));

        return $error;
    

Puede llevar esto un paso más allá y reemplazar completamente wp-login.php al redirigir a los usuarios a su página de inicio de sesión personalizada y usar esa página también para la redirección login_failed. Código completo:

/**
 * Custom Login Page Actions
 */
// Change the login url sitewide to the custom login page
add_filter( 'login_url', 'custom_login_url', 10, 2 );
// Redirects wp-login to custom login with some custom error query vars when needed
add_action( 'login_head', 'custom_redirect_login', 10, 2 );
// Updates login failed to send user back to the custom form with a query var
add_action( 'wp_login_failed', 'custom_login_failed', 10, 2 );
// Updates authentication to return an error when one field or both are blank
add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
// Automatically adds the login form to "login" page
add_filter( 'the_content', 'custom_login_form_to_login_page' );

/**
 * Custom Login Page Functions
 */
function custom_login_url( $login_url='', $redirect='' )

    $page = get_page_by_path('login');
    if ( $page )
    
        $login_url = get_permalink($page->ID);

        if (! empty($redirect) )
            $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url);
    
    return $login_url;

function custom_redirect_login( $redirect_to='', $request='' )

    if ( 'wp-login.php' == $GLOBALS['pagenow'] )
    
        $redirect_url = custom_login_url();

        if (! empty($_GET['action']) )
        
            if ( 'lostpassword' == $_GET['action'] )
            
                return;
            
            elseif ( 'register' == $_GET['action'] )
            
                $register_page = get_page_by_path('register');
                $redirect_url = get_permalink($register_page->ID);
            
        
        elseif (! empty($_GET['loggedout'])  )
        
            $redirect_url = add_query_arg('action', 'loggedout', custom_login_url());
        

        wp_redirect( $redirect_url );
        exit;
    

function custom_login_failed( $username )

    $referrer = wp_get_referer();

    if ( $referrer && ! strstr($referrer, 'wp-login') && ! strstr($referrer, 'wp-admin') )
    
        if ( empty($_GET['loggedout']) )
        wp_redirect( add_query_arg('action', 'failed', custom_login_url()) );
        else
        wp_redirect( add_query_arg('action', 'loggedout', custom_login_url()) );
        exit;
    

function custom_authenticate_username_password( $user, $username, $password )

function custom_login_form_to_login_page( $content )

    if ( is_page('login') && in_the_loop() )
    
        $output = $message = "";
        if (! empty($_GET['action']) )
        
            if ( 'failed' == $_GET['action'] )
                $message = "There was a problem with your username or password.";
            elseif ( 'loggedout' == $_GET['action'] )
                $message = "You are now logged out.";
            elseif ( 'recovered' == $_GET['action'] )
                $message = "Check your e-mail for the confirmation link.";
        

        if ( $message ) $output .= '

'. $message .'

'; $output .= wp_login_form('echo=0&redirect='. site_url()); $output .= 'Lost Password?'; $content .= $output; return $content;

Personalícelos y agréguelos para agregar su logotipo a la página de inicio de sesión de wp para recuperar la contraseña:

// calling it only on the login page
add_action( 'login_enqueue_scripts', 'custom_login_css', 10 );
function custom_login_css()  wp_enqueue_style( 'custom_login_css', get_template_directory_uri() .'/library/css/login.css', false ); 
// changing the logo link from wordpress.org to your site
add_filter( 'login_headerurl', 'custom_login_logo_url' );
function custom_login_logo_url()  return home_url(); 
// changing the alt text on the logo to show your site name
add_filter( 'login_headertitle', 'custom_login_title' );
function custom_login_title()  return get_option('blogname'); 

Logotipo de inicio de sesión css:

.login h1 a 
    background: url(../images/login-logo.png) no-repeat top center;
    width: 274px;
    height: 63px;
    text-indent: -9999px;
    overflow: hidden;
    padding-bottom: 15px;
    display: block;

EDITAR: Acabo de implementar esto en otro sitio desde cero, y encontré que el “paso más allá” anterior era más completo, y solucioné pequeños errores de sintaxis en las “add_actions”. Se agregaron algunos comentarios y un método para agregar automáticamente el formulario de inicio de sesión a la página de inicio de sesión sin un archivo de plantilla separado. El método del formulario de inicio de sesión debería funcionar en la mayoría de los casos, ya que está adjunto a “the_content”, podría causar un problema si tiene más de un bucle en la página de inicio de sesión, solo use una plantilla page-login.php en ese caso.

wp_login_form() crea un formulario con una acción attribute de site_url/wp-login.php, lo que significa que cuando hace clic en el botón enviar, el formulario se publica en site_url/wp-login.php que ignora redirect_to en los errores (como una contraseña incorrecta), por lo que en su caso, vuelva a usar un complemento o vuelva a crear todo el proceso de inicio de sesión y de esa manera tendrá control sobre los errores, eche un vistazo a Verificar el nombre de usuario correcto en el formulario de inicio de sesión personalizado que es una pregunta muy similar.

Comentarios y calificaciones de la guía

Recuerda que puedes difundir esta división si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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