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

WordPress获取页面ID实现未登录用户重定向问题排查

WordPress未登录用户受限页面重定向失效问题解决

问题根源

原代码使用init钩子触发重定向逻辑,这个钩子触发时机过早——此时WordPress还未完成页面查询流程,get_queried_object_id()无法获取到正确的当前页面ID,导致后续的页面匹配判断失效。此外硬编码登录URL、冗余的多条件判断也存在优化空间。

修正后的代码

function restrict_pages_redirect() {
    // 定义需要限制访问的页面ID集合
    $restricted_page_ids = [5, 8, 10];

    // 先确认当前访问的是页面,且属于受限ID列表
    if (is_page() && in_array(get_queried_object_id(), $restricted_page_ids)) {
        // 未登录用户则重定向到登录页
        if (!is_user_logged_in()) {
            // 生成带原页面跳转参数的登录URL,登录后自动返回原页面
            $login_url = wp_login_url(get_permalink());
            wp_redirect($login_url);
            exit;
        }
    }
}
// 使用template_redirect钩子,此时页面查询已完成,能拿到正确的页面ID
add_action('template_redirect', 'restrict_pages_redirect');

关键优化点

  • 钩子替换:改用template_redirect钩子,该钩子在WordPress完成页面查询、即将加载模板时触发,此时get_queried_object_id()可以准确获取当前页面ID。
  • 逻辑优化:用数组存储受限页面ID,简化多条件判断,后续维护更方便;先判断is_page()避免对非页面类型的内容误处理。
  • URL生成:使用wp_login_url()动态生成登录地址,同时传入当前页面链接作为跳转参数,提升用户登录后的体验。
  • 脚本终止:确保exit()紧跟wp_redirect,终止后续代码执行,避免重定向被后续逻辑打断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:05:06