WordPress:已登录用户从登录页按角色跳转失效问题排查
修复WordPress登录模板的已登录用户跳转空白问题
问题根源
- 原代码中
get_header()在登录判断前执行,导致HTTP响应头已发送,wp_redirect()无法正常触发(WordPress要求跳转必须在任何输出前执行)。 - 执行
exit后中断了后续代码,页面仅加载了部分header内容,最终显示空白。 - 角色判断逻辑重复调用
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
相关产品推荐
相关产品推荐

