Como mostrar 'erro de login' e 'senha perdida' na minha página de modelo?


10

Estou fornecendo login front-end em um modelo, usando a função wp_login_form. Ele lida com o redirecionamento após o login e logout com muito cuidado! Mas se o nome de usuário / senha não corresponder ou não existir, o usuário será redirecionado para a página de login do administrador, com o erro js instável. Também é o caso quando estou tentando redefinir a senha, ela me leva à página de back-end, onde tenho que inserir meu e-mail para redefinir a senha. Quero mostrar essas duas atividades no meu modelo. Existe uma maneira de eu fazer isso?

Agradeço por qualquer ajuda desde já.

Respostas:


9

Sim é possivel. Você precisa criar três filtros para isso.

Material do administrador dentro de uma 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;
    }
}

Primeiro, precisamos filtrar a saída da função wp_login_url()que é usada wp_login_form()no actionatributo forms .

Olhe para o método modifyLoginUrl(). Aqui nós armazenamos o URL da página logindentro da variável $loginUrl. Esta página deve existir dentro do WordPress, então crie-a primeiro.

Em seguida, precisamos de um filtro para a função wp_lostpassword_url()e wp_register(). É basicamente o mesmo. O URL do site é armazenado dentro da variável $lostpwUrle $registerUrl.

Por último, mas não menos importante, você deve chamar a classe no gancho de ação certo. Para temas, deve ser after_setup_themee para plugins que você pode usar 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();
}

Sinto muito, mas gostaria de fazer isso, mas não consigo entender! No código que você forneceu, o que deve ser alterado por mim?
Bram Vanroy 01/10/12

Bram, se você estiver criando um tema personalizado, coloque todos os primeiro e segundo blocos de código no arquivo de funções do tema. Se você estiver criando um plug-in, coloque o primeiro e o terceiro bloco de código no seu arquivo. Parece que a única coisa que você pode modificar é a 9ª linha da classe, onde está escrito $loginUrl = site_url('login'); // Link to login URL. Basta alterar 'login' para corresponder à lesma da página de login que você deseja usar. A menos que o Rofflox cometa um erro de sintaxe que não estou vendo, parece que ele funcionaria perfeitamente.
21712 Jen

@guiniveretoo Obrigado pela sua resposta! O problema é que trabalho com um formulário suspenso que pode ser acessado a partir de qualquer página do site. Portanto, não existe uma lesma definitiva possível, porque as pessoas podem acessar a partir de qualquer página ... Então, o que devo colocar lá?
Bram Vanroy 17/10/12

11
Bram - O Wordpress precisa de um URL de login para que, se houver algum erro do usuário ou similar, haja um lugar para eles redefinirem sua senha ou se inscreverem em uma conta. A configuração de um URL de login fornece essa página. Eu fiz exatamente essa configuração com um projeto no ano passado: uma caixa de login em javascript que apareceu com o formulário de login - se eles inserem suas informações corretamente, elas são enviadas ao wp-admin; caso contrário, eles acabam na página de login personalizada para tentar novamente ou redefinir sua senha.
21912 Jen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.