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

