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

WordPress私密/草稿状态文章为何仍对公众可见?

私密/草稿状态WordPress文章未登录仍可访问的排查方向
  • 检查主题模板的权限校验逻辑
    部分主题的自定义模板可能跳过了WordPress默认的权限检查,直接输出文章内容。打开对应页面的模板文件(比如single.php、page.php或自定义模板),确认有没有正确加入权限判断代码,比如:

    // 针对私密/草稿文章的权限校验
    if ( ( get_post_status() === 'private' && !is_user_logged_in() ) || get_post_status() === 'draft' ) {
        wp_redirect( home_url() );
        exit;
    }
    

    如果模板里缺失这类判断,就会导致未登录用户能直接看到内容。

  • 核实数据库中文章的实际状态
    有时候后台显示的状态和数据库实际值不一致。通过phpMyAdmin打开wp_posts表,找到对应文章的ID,查看post_status字段值是否为private(私密)或draft(草稿),如果是publish(发布),说明状态被异常修改了,手动改回即可。

  • 检查访客角色的权限配置
    若你创建过自定义角色,或修改过默认访客角色的权限,可能误给了访客read_private_posts(读取私密文章)这类权限。可以通过角色管理插件,或直接查看数据库wp_options表中的wp_user_roles字段,确认访客角色没有超出范围的权限。

  • 排查自定义查询或REST API泄露
    即使使用标准查询循环,若存在额外的WP_Query代码,比如设置了'post_status' => 'any',会把所有状态的文章都查询出来。另外,未限制的REST API可能泄露内容,尝试访问your-domain.com/wp-json/wp/v2/posts?status=draft,若能返回文章数据,需要添加代码限制未登录访问:

    add_filter( 'rest_authentication_errors', function( $result ) {
        if ( !is_user_logged_in() ) {
            return new WP_Error( 'rest_not_authorized', '未登录无法访问API', array( 'status' => 401 ) );
        }
        return $result;
    } );
    
  • 清除服务器/CDN层级的缓存
    除了插件缓存,服务器的Nginx/Apache缓存、Cloudflare等CDN的缓存可能还保留着文章公开状态时的版本。手动刷新CDN缓存,或登录服务器删除缓存目录的文件,再测试访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:54:23