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

10

Je fournis une connexion frontale dans un modèle, en utilisant la fonction wp_login_form. Il gère très bien la redirection après la connexion et la déconnexion! Mais si le nom d'utilisateur / mot de passe ne correspond pas, ou est inexistant, l'utilisateur est redirigé vers la page de connexion de l'administrateur, avec l'erreur tremblante js. Il en va de même lorsque j'essaie de réinitialiser le mot de passe, cela m'amène à la page backend moi où je dois entrer mon e-mail pour réinitialiser le mot de passe. Je souhaite afficher ces deux activités sur mon modèle. Y a-t-il un moyen de le faire?

Merci d'avance pour toute aide.

Rutwick Gangurde
la source

Réponses:

9

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

Trucs administratifs 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()utilisée par wp_login_form()l' actionattribut forms .

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 dans WordPress, alors créez-la d'abord.

Ensuite, nous avons besoin d'un filtre pour la fonction wp_lostpassword_url()et wp_register(). C'est fondamentalement la même chose. L'URL du site est stockée à l'intérieur de la variable $lostpwUrlet $registerUrl.

Enfin et surtout, vous devez appeler la classe sur le bon crochet d'action. Pour les thèmes, cela devrait être after_setup_themeet pour les plugins que vous pouvez utiliser plugins_loaded.

Themes / 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();
}
rofflox
la source
Je suis désolé de heurter cela, mais j'aimerais faire ça, mais je n'arrive pas à le comprendre! Dans le code que vous avez fourni, que dois-je changer?
Bram Vanroy
Bram, si vous créez un thème personnalisé, placez tous les premier et deuxième blocs de code dans votre fichier de fonctions de thème. Si vous créez un plugin, placez les premier et troisième blocs de code dans votre fichier de plugin. Il semble que la seule chose que vous pourriez avoir à modifier est la 9ème ligne de la classe, où elle est indiquée $loginUrl = site_url('login'); // Link to login URL. Modifiez simplement 'login' pour correspondre au slug de la page de connexion que vous souhaitez utiliser. À moins que Rofflox n'ait fait une erreur de syntaxe que je ne vois pas, cela semble fonctionner parfaitement.
Jen
@guiniveretoo Merci pour votre réponse! Le problème est que je travaille avec un formulaire déroulant accessible à partir de n'importe quelle page du site Web. Donc, il n'y a pas de slug définitif possible, car les gens peuvent se connecter depuis n'importe quelle page ... Alors, que dois-je y mettre?
Bram Vanroy
1
Bram - Wordpress a besoin d'une URL de connexion pour que s'il y a une erreur utilisateur ou similaire, il y ait un endroit où aller pour réinitialiser son mot de passe ou ouvrir un compte. La définition d'une URL de connexion fournit cette page. J'ai fait exactement cette configuration avec un projet l'année dernière: une boîte de connexion javascript qui est apparue avec le formulaire de connexion - s'ils entrent correctement leurs informations, il les envoie à wp-admin; sinon, ils se retrouvent sur la page de connexion personnalisée pour réessayer ou réinitialiser leur mot de passe.
Jen