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.