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
相关产品推荐
相关产品推荐

