¿Cómo mostrar 'error de inicio de sesión' y 'contraseña perdida' en la página de mi plantilla?

10

Estoy proporcionando inicio de sesión de front-end en una plantilla, usando la función wp_login_form. Maneja la redirección después de iniciar sesión y cerrar sesión bastante bien! Pero si el nombre de usuario / contraseña no coincide, o no existe, el usuario es redirigido a la página de inicio de sesión del administrador, con el error shaky js Lo mismo ocurre cuando intento restablecer la contraseña, me lleva a la página de back-end donde debo ingresar mi correo electrónico para restablecer la contraseña. Quiero mostrar ambas actividades en mi plantilla. ¿Hay alguna manera de que pueda hacer esto?

Gracias por cualquier ayuda por adelantado.

    
pregunta Rutwick Gangurde 24.09.2011 - 07:02

1 respuesta

9

Sí, es posible. Tienes que crear tres filtros para esto.

Cosas de administrador dentro de una clase

class WPSE29338_Admin {
    public static function setup() {
        add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
        add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
        add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
    }

    public static function modifyLoginURL($loginUrl, $redirect = '') {
        $loginUrl = site_url('login'); // Link to login URL

        if(!empty($redirect)) {
            $loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
        }

        return $loginUrl;
    }

    public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
        $lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL

        if(!empty($redirect)) {
            $lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
        }

        return $lostpwUrl;
    }

    public static function modifyRegisterURL($registerUrl) {
        if(!is_user_logged_in()) {
            if (get_option('users_can_register')) {
                $registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
            } else {
                $registerUrl = '';
            }
        }

        return $registerUrl;
    }
}

Primero, debemos filtrar la salida de la función wp_login_url() que se usa por wp_login_form() en el atributo forms coa de%.

Mira el método action . Aquí almacenamos la URL de la página modifyLoginUrl() dentro de la variable login . Esta página debe existir dentro de WordPress, así que créala primero.

A continuación necesitamos un filtro para la función $loginUrl y wp_lostpassword_url() . Es básicamente lo mismo. La URL del sitio se almacena dentro de las variables wp_register() y $lostpwUrl .

Por último, pero no menos importante, debes llamar a la clase con el gancho de acción correcto. Para los temas, este debe ser $registerUrl y para los complementos puede usar after_setup_theme .

Themes / functions.php

add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

Complementos

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
    
respondido por el rofflox 24.09.2011 - 14:39

Lea otras preguntas en las etiquetas