Come mostrare "errore di accesso" e "password persa" sulla mia pagina modello?


10

Sto fornendo l'accesso front-end in un modello, utilizzando la funzione wp_login_form. Gestisce il reindirizzamento dopo il login e il logout piuttosto ordinatamente! Ma se il nome utente / password non corrispondono o sono inesistenti, l'utente viene reindirizzato alla pagina di accesso dell'amministratore, con l'errore js traballante. Lo stesso vale per il tentativo di reimpostare la password, mi porta alla pagina di back-end me dove devo inserire la mia e-mail per reimpostare la password. Voglio mostrare entrambe queste attività sul mio modello. C'è un modo per farlo?

Grazie per l'aiuto in anticipo.

Risposte:


9

Si è possibile. Devi creare tre filtri per questo.

Roba da amministratore all'interno di una 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;
    }
}

Per prima cosa dobbiamo filtrare l'output della funzione wp_login_url()utilizzata dall'attributo wp_login_form()dei moduli action.

Guardate il metodo modifyLoginUrl(). Qui memorizziamo l'URL della pagina loginall'interno della variabile $loginUrl. Questa pagina deve essere presente in WordPress, quindi creala prima.

Successivamente abbiamo bisogno di un filtro per la funzione wp_lostpassword_url()e wp_register(). È praticamente lo stesso. L'URL del sito è memorizzato all'interno della variabile $lostpwUrle $registerUrl.

Ultimo ma non meno importante, devi chiamare la classe sul gancio di azione giusto. Per i temi questo dovrebbe essere after_setup_themee per i plugin che puoi usare plugins_loaded.

Temi / funzioni.php

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

plugin

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

Mi dispiace sbatterlo, ma mi piacerebbe farlo, ma non riesco a capirlo! Nel codice che hai fornito, cosa dovrebbe essere cambiato da me?
Bram Vanroy,

Bram, se stai creando un tema personalizzato, inserisci tutti i primi e secondi blocchi di codice nel file delle funzioni del tema. Se stai creando un plug-in, inserisci il primo e il terzo blocco di codice nel file del plug-in. Sembra che l'unica cosa che potresti dover modificare sia la nona riga della classe, dove dice $loginUrl = site_url('login'); // Link to login URL. Cambia 'login' in modo che corrisponda alla lumaca della pagina di login che desideri utilizzare. A meno che Rofflox non abbia commesso un errore di sintassi che non vedo, sembra che funzioni perfettamente.
Jen,

@guiniveretoo Grazie per la tua risposta! Il problema è che lavoro con un modulo a discesa a cui è possibile accedere da qualsiasi pagina del sito Web. Quindi, non esiste una lumaca definita possibile, perché le persone possono accedere da qualsiasi pagina ... Quindi, cosa dovrei mettere lì?
Bram Vanroy,

1
Bram - Wordpress ha bisogno di un URL di accesso in modo che se c'è qualche errore dell'utente o simile, c'è un posto dove andare e reimpostare la password o registrarsi per un account. L'impostazione di un URL di accesso fornisce quella pagina. Ho fatto esattamente questa configurazione con un progetto l'anno scorso: una casella di login javascript che è apparso con il modulo di login - se inseriscono correttamente le loro informazioni, le invia a wp-admin; in caso contrario, finiscono nella pagina di accesso personalizzata per riprovare o reimpostare la password.
Jen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.