如何在registration_redirect过滤器中获取新注册用户ID并重定向至作者页?
解决WordPress注册后重定向到作者页并获取新用户ID的问题
在registration_redirect过滤器中直接用wp_get_current_user()或$_POST获取用户ID失败的原因:
wp_get_current_user()返回空:默认注册流程中,用户注册成功后不会自动登录,此时当前用户会话还未建立。- 通过
$_POST['user_email']查询用户失败:registration_redirect触发时,用户数据可能还未完全写入数据库,存在数据同步延迟问题。
可行解决方案
利用user_register钩子(该钩子在用户成功创建后触发,会直接传递用户ID参数)临时存储用户ID,再在registration_redirect中读取该ID生成作者页链接,具体实现代码如下:
- 开启PHP会话(用于临时存储用户ID)
WordPress默认未启用会话,需要先初始化:
add_action('init', function() { if (!session_id()) { session_start(); } });
- 存储新注册用户ID到会话
add_action('user_register', function($user_id) { $_SESSION['new_registered_user_id'] = $user_id; });
- 修改重定向过滤器函数
add_filter('registration_redirect', 'redirect_to_author_page'); function redirect_to_author_page($registration_redirect) { // 读取会话中的新用户ID if (isset($_SESSION['new_registered_user_id'])) { $user_id = $_SESSION['new_registered_user_id']; // 清理会话数据,避免后续请求干扰 unset($_SESSION['new_registered_user_id']); $author_url = get_author_posts_url($user_id); // 确保链接有效,无效时返回默认重定向地址 return $author_url ? $author_url : $registration_redirect; } // 未获取到ID时返回默认地址 return $registration_redirect; }
补充说明
- 该方案兼容WordPress默认注册流程及大多数自定义注册插件(只要插件触发
user_register钩子)。 - 会话存储仅在当前注册请求周期内有效,不会留下冗余数据。
- 加入了 fallback 逻辑,避免因ID获取失败导致重定向错误。
内容的提问来源于stack exchange,提问作者karlosuccess
相关产品推荐
相关产品推荐

