Short answer - 您的原始功能(大部分)正常工作。这是您编辑的函数,用于执行它需要执行的操作:
function automatically_log_me_in( $user_id ) {
wp_set_current_user( $user_id );
wp_set_auth_cookie( $user_id );
wp_redirect( home_url( \'/some-ending-page/\' ) );
exit();
}
add_action( \'user_register\', \'automatically_log_me_in\' );
Long answer - 下面解释一下为什么这是答案。
的建议wp_signon()
不会的。您需要用户凭据,除非传递凭据,否则该函数将尝试从表单中检索发布的用户名(“log”)和密码(“pwd”),我假设表单中缺少“pwd”。
其他答案提出了一些建议,但遗憾的是,这些建议并不适用于此特定情况。有几个建议是针对插件的。作为其中一个(WP成员)的开发人员,我非常希望您使用该插件,建议您使用wpmem_post_register_data
如果你不使用WP成员,对你没有任何好处。
使用wp_set_current_user()
因为你最初的想法是正确的;但是you need to redirect the user at the end 因此,它们被视为已登录。
这个user_register
操作传递刚注册的用户的ID,因此我不确定您为什么要更改$user_id
通过将其设置为$user->ID
当您已经拥有该值时。在原始函数中获取用户对象的唯一原因是获取用户名。这是的可选参数wp_set_current_user()
以及wp_login
这样我就不用担心了。(我会抛弃wp_login
操作,因为所做的一切就是在您的流程中加入一个钩子,让外部函数钩住。您是否想要/需要这需要比OP提供更多的信息。)IMO,所有这些都只是代码中的浪费位。
您的注册过程到此结束吗?已设置身份验证cookie,并且用户已登录。但是,只有在下一个页面请求时才会读取,因此您需要将用户重定向到您希望他们使用的任何页面wp_redirect()
之后,您需要exit()
.