wp_login事件定义为当用户登录时触发,它是写在wp_signon函数里的一个hook,该do_action出现在wp_signon函数的倒数第二行:
wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie);
do_action('wp_login', $credentials['user_login']);
return $user;
显然wp_login传递参数为用户名user_login(亦即username),因此要在这里获取user的信息,还需要使用一个函数get_user_by,这个函数很特别,第一个参数是给定的字符串,这里应该使用get_user_by(“login”,$user_login)。
另外值得说明的是,在wp_login事件里用wp_get_current_user和get_current_user_id全部无效。

自定义wordpress注册页面
WordPress的注册、登录、密码找回等功能全部写在根目录下的wp-login.php里面,其中的注册项用户名username和邮箱email都是写死在html中的,当我们要做二次开发不需要username的时候就会碰到一些麻烦,而且这个麻烦不可能通过插件plugin的方式来解决(虽然可以使用javascript实现,但那样太假了,倘若用户未启用javascript……)。
WordPress默认将users表中的user_login (即username)和email设为unique,不允许重复,因此当你在注册时使用重复的username或者email就无法通过,username为空也不行,解决的办法其实很简单,可以用插件在用户注册的时候将username设置成email就可以了,然后接着走wp-login.php剩下的流程,要实现这个想法其实也非常简单,只需要将wp-login.php中register_new_user函数中对username检查的内容删除,然后在把username部分的input标签删除就可以了。
其他的action, filter依然奏效。