You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置login_redirect过滤器,不覆盖redirect_to参数实现角色跳转?

修复WordPress登录跳转逻辑问题

原代码存在的问题

  • 角色判断逻辑缺陷:直接取$user->roles[0]仅获取用户第一个角色,忽略用户可能拥有多个角色的场景,导致角色判断不准确。
  • 自定义跳转参数处理不规范:直接使用$_GET["redirect_to"]存在安全风险,且未利用钩子提供的$request参数,同时未优先处理自定义跳转逻辑。
  • 逻辑顺序颠倒:需求明确自定义跳转参数优先级最高,但原代码先判断角色再检查参数,不符合需求逻辑。
  • 代码分支覆盖不全:部分场景(如目标角色但存在自定义跳转、非目标角色无自定义跳转)无明确返回值,导致跳转异常。

修复后的代码

function my_login_redirect($redirect_to, $request, $user) {
    // 优先处理自定义跳转:存在有效redirect_to参数则直接返回该地址
    if (!empty($request['redirect_to'])) {
        return $request['redirect_to'];
    }

    // 验证用户对象有效性及角色数据
    if (isset($user) && is_a($user, 'WP_User') && !empty($user->roles)) {
        // 检查用户是否包含指定角色
        if (in_array('partner', $user->roles) || in_array('team_member', $user->roles)) {
            // 跳转到目标页面
            return site_url('welcome-user/');
        }
    }

    // 其他场景返回默认跳转地址
    return $redirect_to;
}
add_filter('login_redirect', 'my_login_redirect', 10, 3);

修复说明

  1. 调整逻辑顺序,确保自定义跳转参数优先生效,符合需求优先级。
  2. 使用in_array()检查角色,支持用户拥有多个角色的场景,判断更准确。
  3. 通过is_a($user, 'WP_User')验证用户对象有效性,避免潜在报错。
  4. 利用钩子提供的$request变量获取跳转参数,符合WordPress开发规范。
  5. 完善所有分支的返回值,确保任何场景下都有明确的跳转目标。

内容的提问来源于stack exchange,提问作者user315338

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:22:14