WordPress向登录用户显示私人帖子 - 如何关闭此功能?

Asp*_*irl 8 wordpress post private

在一个新的WordPress 2.8安装中,我有一些分配给Foo类别的帖子,这些帖子以前是公开的,但后来被私有化了.当我登录WordPress(作为管理员)并碰巧也在同一浏览器的不同选项卡中浏览Foo类别页面时,我可以看到类别页面上的私人帖子,条目标题前缀为"私人的: ".

现在,没有任何内容被"破坏" - 帖子被正确隐藏在未登录的用户中.但我不希望登录用户看到现场网站上的私人帖子,因为坦白说这只是烦人的,没有帮助.

我应该对类别存档页面上的WP循环或函数文件做什么来关闭这种不受欢迎的能力来查看网站上的私人帖子?

Edw*_*ale 19

执行所需操作的黑客方法是将这行代码放在循环的顶部(在the_post()部分之后:

if( get_post_status()=='private' ) continue;
Run Code Online (Sandbox Code Playgroud)

这是一种破解方式,因为你的WordPress仍在从数据库中加载该帖子并将其分解为后期计数等,但在显示它时会跳过它.例如,如果您搜索仅在私人帖子中的短语,您将获得一个没有任何错误的空白页面.

执行此操作的正确方法是添加一个过滤器,用于修改用于生成帖子列表的SQL.如果您在管理部分,那么棘手的部分是不要过滤它,否则您将永远不会再看到您的私人帖子.此过滤器的最佳位置在主题的functions.php文件中.这是你应该放在那里的东西:

add_filter('posts_where', 'no_privates');
function no_privates($where) {
    if( is_admin() ) return $where;

    global $wpdb;
    return " $where AND {$wpdb->posts}.post_status != 'private' ";
}
Run Code Online (Sandbox Code Playgroud)

  • 这段代码非常好.我将`is_admin()`改为`is_admin()|| is_single()`所以我可以预览私人帖子. (2认同)