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

如何修改WordPress代码实现未登录用户仅可访问指定页面,其余页面跳转至登录页?

如何修改WordPress代码实现未登录用户仅可访问指定页面,其余页面跳转至登录页?

嗨,我看了你遇到的问题啦,原代码的核心问题确实出在条件判断的逻辑上,咱们一步步来修正:

先说说原代码的问题

你写的条件(empty($behind_login_pages) && in_array($page_id, $behind_login_pages)) && !is_user_logged_in()逻辑完全搞反了:

  • empty($behind_login_pages)会判断数组是否为空,但你已经定义了有内容的数组,这个判断永远返回false,导致整个条件永远不成立
  • 我们需要的逻辑是:当用户未登录,且当前页面不在允许访问的白名单里时,才跳转到登录页

修正后的代码

if( !function_exists('tf_restrict_access_without_login') ):

add_action( 'template_redirect', 'tf_restrict_access_without_login' );

function tf_restrict_access_without_login(){
    // 获取当前页面/文章ID
    $page_id = get_queried_object_id();

    // 未登录用户可访问的页面ID白名单
    $allowed_pages = [ 95, 5, 141 ];

    // 核心条件:用户未登录,且当前页面不在白名单内
    if( !is_user_logged_in() && !in_array($page_id, $allowed_pages) ):
        // 跳转到登录页,注意这里要改成你实际的登录页URL(记得是双斜杠https://)
        wp_redirect( 'https://example.com/login' );
        // 必须加上exit,确保后续代码不再执行
        exit;
    endif;
}

endif;

关键修改点说明

  • 把原数组名$behind_login_pages改成了更直观的$allowed_pages,方便理解
  • 修正了条件判断逻辑:!is_user_logged_in() && !in_array($page_id, $allowed_pages),精准匹配我们需要的场景
  • 调整了exit;的位置,放在wp_redirect之后(原代码里return之后exit不会执行,这也是可能导致跳转失效的小问题)
  • 给代码加了中文注释,方便后续维护

额外小提示

  • 如果需要添加更多允许访问的页面,直接在$allowed_pages数组里添加对应的页面ID即可
  • 如果你用的是WooCommerce,可以用get_permalink(get_option('woocommerce_myaccount_page_id'))来动态获取登录页链接,避免硬编码URL失效
  • 测试前记得清理网站缓存,避免缓存导致测试结果不准确

备注:内容来源于stack exchange,提问作者Junuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:18:06