如何让template_redirect()仅执行一次?解决首页重定向循环问题
解决WordPress首页重定向循环问题
你的问题核心是:重定向后页面仍为首页,is_page('homepage')的条件始终成立,导致无限循环。解决的关键是在重定向前先检查URL里是否已经存在ref参数,只有当参数不存在时才执行重定向。
修改后的代码如下:
function redirect_with_ref() { // 先判断是否是目标首页,再检查URL中是否没有ref参数 if ( is_page( 'homepage' ) && ! isset( $_GET['ref'] ) ) { $redirect_url = add_query_arg( array( 'ref' => random_str() ), home_url() ); wp_redirect( $redirect_url ); exit; } } add_action( 'template_redirect', 'redirect_with_ref' );
逻辑说明
- 新增
! isset( $_GET['ref'] )的判断:当URL里已经有ref参数时,不再触发重定向,直接跳过,避免循环。 - 函数名改成
redirect_with_ref只是为了语义更清晰,你也可以保留原函数名。
如果random_str()生成的是一次性或需要时效性的参数,也可以结合session做标记,但用URL参数判断是最直接适配你需求的方案。
内容的提问来源于stack exchange,提问作者Freddy
相关产品推荐
相关产品推荐

