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

非登录用户无法访问虚拟分页页面问题求助

问题解决步骤

1. 修正重写规则与查询变量

更新functions.php中的代码,补充基础路径的重写规则,同时优化正则匹配的严谨性:

function year_add_query_vars( $vars ) {
    $vars[] = 'variable';
    return $vars;
}
add_filter( 'query_vars', 'year_add_query_vars' );

// 基础路径规则(不带分页)
add_rewrite_rule(
    'died-persons/([0-9]{4})/?$',
    'index.php?variable=$matches[1]',
    'top'
);

// 分页路径规则
add_rewrite_rule(
    'died-persons/([0-9]{4})/page/([0-9]+)/?$',
    'index.php?variable=$matches[1]&paged=$matches[2]',
    'top'
);

2. 刷新WordPress重写规则

登录后台后,进入设置 → 固定链接,无需修改任何配置,直接点击「保存更改」,触发重写规则的刷新,确保新规则在未登录状态下也能生效。

3. 修改模板判断逻辑

将index.php中的判断代码替换为基于查询变量的方式,避免依赖$_SERVER['REQUEST_URI'](该变量在未登录时可能因缓存、服务器配置等因素出现匹配偏差):

$year_var = get_query_var('variable');
$paged_var = get_query_var('paged', 1);

// 校验年份变量有效性,匹配基础路径或分页路径场景
if ( $year_var && preg_match('/^[0-9]{4}$/', $year_var) ) {
    get_template_part( 'template-parts/content-personlist' );
    exit; // 终止后续默认模板加载
}

4. 适配content-personlist.php的分页逻辑

在content-personlist.php中,通过查询变量获取当前页码,用于外部数据库的分页查询:

$current_page = get_query_var('paged', 1);
// 基于$current_page处理外部数据库的分页数据获取逻辑

问题根源说明

未登录用户访问分页出现404,主要源于两点:

  • 原代码仅添加了分页重写规则,缺少基础路径规则,且未刷新重写规则,导致未登录状态下WordPress无法正确解析分页路径;
  • 使用$_SERVER['REQUEST_URI']做模板匹配,该变量在未登录时可能因服务器缓存、CDN或WordPress查询机制的差异,无法被正确匹配,导致目标模板未加载,返回默认404页面。

内容的提问来源于stack exchange,提问作者Andreas Böttcher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:22:43