WordPress 5.7版本添加新用户后重定向失效的解决方法
解决WordPress 5.7添加用户后重定向到正确编辑页面的问题
你的代码在WordPress 5.7失效主要有几个核心原因:
get_userdatabylogin()函数在5.7版本已被弃用,官方推荐使用get_user_by()替代- 原逻辑依赖
usersearch参数的判断完全不准确——添加用户成功后,WordPress默认跳转的users.php携带的是update=add和id参数,而非usersearch admin_init钩子时机过早,容易被其他后台操作干扰,导致重定向逻辑误触发
下面是修改后的完整代码,能精准实现添加用户后跳转到目标编辑页面的需求:
add_action('admin_init', 'redirect_after_user_add'); function redirect_after_user_add() { // 仅在添加用户成功后的跳转场景触发 if (isset($_GET['page'], $_GET['update'], $_GET['id']) && $_GET['page'] === 'users' && $_GET['update'] === 'add') { $user_id = intval($_GET['id']); // 验证用户ID有效性,避免非法参数 if ($user_id > 0 && get_user_by('id', $user_id)) { wp_safe_redirect(admin_url("user-edit.php?user_id={$user_id}")); exit; // 必须调用exit终止后续执行,否则重定向可能失效 } } }
关键改动说明:
- 替换弃用函数:直接通过用户ID用
get_user_by('id', $user_id)获取用户,更高效且符合新版WordPress规范 - 精准触发条件:通过
page=users、update=add和id三个参数组合判断,确保只有在添加用户成功的场景下才执行重定向 - 安全重定向:用
wp_safe_redirect()替代wp_redirect(),会自动验证目标URL属于当前站点,避免恶意跳转风险 - 强制终止执行:重定向后必须调用
exit,阻止WordPress继续执行后续代码,保证重定向生效
如果你想要更简洁可靠的实现方式,推荐使用user_register动作钩子——它会在用户创建成功后立即触发,不需要额外判断URL参数:
add_action('user_register', 'redirect_after_user_register'); function redirect_after_user_register($user_id) { // 仅在后台添加用户时执行重定向 if (is_admin()) { wp_safe_redirect(admin_url("user-edit.php?user_id={$user_id}")); exit; } }
这个版本逻辑更直接,完全贴合"用户创建后立即跳转"的需求,稳定性更高。
内容的提问来源于stack exchange,提问作者Musa Baltacı
相关产品推荐
相关产品推荐

