WordPress如何阻止未同意使用条款的已登录用户访问并解决重定向过多错误
错误原因
- 未排除条款同意页本身的重定向校验:
template_redirect钩子会在所有前台页面加载时触发,未同意条款的用户访问/welcome页面时会被反复重定向到同一地址,形成无限循环,最终触发重定向次数过多错误。 - 原代码中重定向地址未补全协议头(http/https),不符合
wp_redirect函数的参数规范,也可能引发跳转异常。
修复方案
在重定向逻辑前新增目标页面的排除判断,同时优化地址写法适配WordPress规范,修复后代码如下:
add_action('template_redirect', 'confirmation_of_terms'); function confirmation_of_terms(){ $current_user_id = get_current_user_id(); if( $current_user_id > 0 ){ // 排除条款同意页面,避免循环重定向,括号内填你的页面别名 if( is_page('welcome') ){ return; } $permission = get_user_meta( $current_user_id, 'approval_of_regulations' , true ); if( empty( $permission ) ){ // home_url会自动拼接站点域名和协议,无需硬编码地址 wp_redirect( home_url('/welcome') ); exit; } } }
补充说明
如果/welcome不是WordPress后台创建的固定页面,可以通过请求路径判断做排除,替换上面的is_page判断逻辑即可:
// 匹配当前访问路径是否包含/welcome,是则跳过重定向 if( strpos( $_SERVER['REQUEST_URI'], '/welcome' ) !== false ){ return; }
如果有其他不需要做权限校验的页面,也可以同步加到排除条件中。
内容的提问来源于stack exchange,提问作者Haksuma
相关产品推荐
相关产品推荐

