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

WordPress登录后重定向仅管理员生效,非管理员无重定向问题排查

问题分析与修复方案

核心问题点

  • 钩子绑定与参数缺失:你仅将login_redirect钩子绑定到custom_login_redirect1函数,但该函数未声明接收钩子传递的$user参数,导致函数内部$user变量未定义,非管理员的判断逻辑全部失效,最终返回未定义的$url,WordPress会 fallback 到默认跳转规则。
  • 函数未启用:逻辑相对正确的custom_login_redirect函数没有通过add_filter绑定到钩子,完全不会被执行。
  • 角色/权限混淆:custom_login_redirect1中错误地将权限voc_edit_events当作角色来判断,$user->roles存储的是用户角色(如administrator、subscriber)而非权限,因此永远匹配不到该值,对应用户无法触发预期跳转。

修复后的代码

add_filter('login_redirect', 'custom_login_redirect', 10, 3 );

function custom_login_redirect( $redirect_to, $request, $user ) {
    // 用户对象不存在时返回默认跳转地址
    if ( !$user || !is_object($user) ) {
        return $redirect_to;
    }

    // 管理员跳转至后台
    if ( $user->has_cap('administrator') ) {
        return admin_url();
    }
    // 拥有voc_edit_events权限的用户跳转至pieces页面
    elseif ( $user->has_cap('voc_edit_events') ) {
        return home_url('/pieces/');
    }
    // 其余用户跳转至protokolle页面
    else {
        return home_url('/protokolle/');
    }
}

修复说明

  1. 正确绑定钩子与参数:将钩子绑定到有效函数,并声明接收login_redirect钩子的三个参数,确保能获取到当前登录用户对象。
  2. 增加边界判断:先检查用户对象是否存在,避免未定义变量引发的错误。
  3. 使用官方推荐的权限判断:用has_cap()判断权限,比直接判断角色更灵活(权限可单独赋予用户,角色也可关联多个权限)。
  4. 简化逻辑:每个分支直接返回对应跳转地址,避免$url未定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:15:20