如何在模板页面上显示“登录错误”和“丢失密码”?


10

我正在使用wp_login_form函数在模板中提供前端登录。登录和注销后,它可以很好地处理重定向!但是,如果用户名/密码不匹配,或者不存在,用户将被重定向到管理员登录页面,并出现不稳定的js错误。当我尝试重设密码时,情况也是如此,它带我到后端页面,在该页面中我必须输入电子邮件以重设密码。我想在我的模板上显示这两个活动。有办法吗?

感谢您的任何帮助。

Answers:


9

是的,有可能。您必须为此创建三个过滤器。

类中的管理内容

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

首先,我们需要过滤forms 属性中wp_login_url()使用的函数的输出。wp_login_form()action

看一下方法modifyLoginUrl()。在这里,我们将页面的URL存储login在变量中$loginUrl。此页面必须存在于WordPress中,因此请首先创建它。

接下来,我们需要为函数wp_lostpassword_url()和过滤wp_register()。基本上是一样的。网站的网址存储在变量$lostpwUrl和中$registerUrl

最后但并非最不重要的一点是,您必须在正确的动作挂钩上调用该类。对于主题应该是这样after_setup_theme,对于插件可以使用plugins_loaded

主题/ functions.php

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

外挂程式

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

很抱歉碰到这个问题,但是我很乐意这样做,但是我似乎无法弄清楚!在您提供的代码中,我应该更改什么?
Bram Vanroy

布拉姆,如果要创建自定义主题,请将所有第一和第二代码块放入主题函数文件中。如果要创建插件,则将代码的第一和第三块放在插件文件中。看来您唯一需要修改的就是该类的第9行,显示为$loginUrl = site_url('login'); // Link to login URL。只需更改“登录”以匹配您要使用的登录页面的标签即可。除非Rofflox犯了我没有看到的语法错误,否则看起来它会很好地工作。
2012年

@guiniveretoo感谢您的答复!问题是我使用可从网站上任何页面访问的下拉表单。因此,不可能存在任何塞,因为人们可以从任何页面登录...那么,我应该放在那儿?
布拉姆·范罗伊

1
Bram-Wordpress需要一个登录URL,这样,如果出现用户错误或类似错误,他们可以在某个地方重新设置密码或注册帐户。设置登录URL将提供该页面。去年,我在一个项目中完全进行了此设置:一个带有登录表单的javascript登录框-如果他们正确输入了信息,它将发送给wp-admin;如果没有,他们最终将进入自定义登录页面以重试或重置密码。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.