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

WordPress:已登录用户从登录页按角色跳转失效问题排查

修复WordPress登录模板的已登录用户跳转空白问题

问题根源

  1. 原代码中get_header()在登录判断前执行,导致HTTP响应头已发送,wp_redirect()无法正常触发(WordPress要求跳转必须在任何输出前执行)。
  2. 执行exit后中断了后续代码,页面仅加载了部分header内容,最终显示空白。
  3. 角色判断逻辑重复调用current_user_can('edit_users'),冗余且低效。

修复后的完整代码

<?php 
/*
* Template Name: Login
*/

// 优先处理已登录用户的跳转逻辑,确保在任何输出前执行
if( is_user_logged_in() ){
  $user = wp_get_current_user();
  
  // 先判断权限,再匹配角色
  if( current_user_can('edit_users') ){
    if( in_array('customrole', $user->roles) ){
      wp_redirect( site_url('/role-page') );
      exit;
    } elseif( in_array('customrole1', $user->roles) ){
      wp_redirect( site_url('/role-page1') );
      exit;
    }
  }
  
  // 无匹配角色的已登录用户,跳转到默认页面(可自行修改)
  wp_redirect( admin_url() );
  exit;
}

// 未登录用户才加载页面结构与登录表单
get_header();
?>

<!-- 自定义登录表单HTML代码 -->
html code 

<?php get_footer(); ?>

关键修改说明

  • 调整逻辑顺序:将登录判断与跳转逻辑移至get_header()之前,确保wp_redirect()在HTTP头发送前执行,解决跳转失效问题。
  • 优化权限与角色判断:合并权限检查,避免重复调用,提升代码效率。
  • 新增默认跳转:为不匹配指定角色的已登录用户设置默认跳转目标,避免页面空白。
  • 明确代码分支:未登录用户的HTML内容仅在未登录状态下加载,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:40:29