仅对登录进程运行“login_footer”钩子


Run 'login_footer' hook only for login processes

在wp-login中.php我们有几个action过程:"注销","注册","检索密码"等......当然还有"登录"。

我正在使用login_footer钩子在"登录表单"之后立即添加一些特殊功能

add_filter('login_footer', array($this, 'special_form'));

如何确定进程何时运行login?所以我可以避免在其他操作中显示special form("注册"、"检索密码"等)。

使用 "login_form_login" 钩子。

add_action('login_form_login', array($this, 'enable_special_form'));
/*... */
function enable_special_form() {
    add_action('login_footer', array($this, 'special_form'));
}

还有一堆其他 login_form_* 钩子用于其他 wp-login.php 操作 - login_form_logout、login_form_register 等。

作为参考,在WordPress 3.4.1中,login_form_*操作在wp-login.php的第380行执行,可用的操作列在第357行。

检查wp-login.php文件,我们看到$action是这样找到的:

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';

因此,使用以下代码,我可以知道正在运行的操作:

add_filter('login_init', array($this, 'login_init'));   
function login_init()
{
    $action              = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
    $this->login_running     = $action == 'login' ? true : false;
}

为了在后续的钩子中使用它,如login_messagelogin_footer等......