web-dev-qa-db-fra.com

Comment afficher "erreur de connexion" et "mot de passe perdu" sur ma page de modèle?

Je fournis la connexion front-end dans un modèle, en utilisant la fonction wp_login_form. Il gère la redirection après connexion et déconnexion assez proprement! Mais si le nom d'utilisateur/mot de passe ne correspond pas, ou est inexistant, l'utilisateur est redirigé vers la page de connexion administrateur, avec l'erreur saccadée js. C'est également le cas lorsque j'essaie de réinitialiser le mot de passe, il me faut la page backend où je dois entrer mon email pour réinitialiser le mot de passe. Je veux montrer ces deux activités sur mon modèle. Est-ce qu'il y a un moyen de faire ça?

Merci d'avance pour toute aide.

10
Rutwick Gangurde

Oui c'est possible. Vous devez créer trois filtres pour cela.

Trucs administrateur dans une classe

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;
    }
}

Nous devons d’abord filtrer la sortie de la fonction wp_login_url() qui est utilisée par wp_login_form() dans l’attribut forms action.

Regardez la méthode modifyLoginUrl(). Ici, nous stockons l'URL de la page login à l'intérieur de la variable $loginUrl. Cette page doit exister à l'intérieur de WordPress, créez-la d'abord.

Ensuite, nous avons besoin d’un filtre pour les fonctions wp_lostpassword_url() et wp_register(). C'est fondamentalement la même chose. L'URL du site est stockée dans les variables $lostpwUrl et $registerUrl.

Dernier point mais non le moindre, vous devez appeler la classe avec le bon crochet d'action. Pour les thèmes, cela devrait être after_setup_theme et pour les plugins, vous pouvez utiliser plugins_loaded.

Thèmes/functions.php

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

Plugins

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
9
rofflox