9

在新的 WordPress 2.8 安装中,我有一些帖子分配到 Foo 类别,这些帖子以前是公开的,但后来被设为私有。当我登录 WordPress(以管理员身份)并且碰巧也在同一浏览器的不同选项卡中浏览 Foo 类别页面时,我可以在类别页面上看到私人帖子,条目标题以单词“私人的: ”。

现在,没有什么是“破坏”的——这些帖子对未登录的用户正确隐藏。但我不希望登录的用户看到直播网站上的私人帖子,因为坦率地说,这很烦人,没有帮助。

我应该对类别存档页面上的 WP Loop 或函数文件做些什么来关闭这种在网站上查看私人帖子的不需要的功能?

4

4 回答 4

20

做你想做的事情的黑客方法是将这行代码放在循环的顶部(在the_post()部分之后:

if( get_post_status()=='private' ) continue;

这是 hack 方式,因为您的 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' ";
}
于 2009-06-19T02:43:37.353 回答
3

为什么不直接添加'post_status' => 'publish'WP_Queryargs 中?

$the_query = new WP_Query( array(
    'post_type' => 'post' ,
    'orderby' => 'date' ,
    'order' => 'DESC' ,
    'post_status' => 'publish',
    'posts_per_page' => 6,
) );
于 2018-09-11T21:56:59.723 回答
1

因此,如果没有人(包括管理员)查看这些私人帖子,为什么不将其状态设置为未发布或草稿呢?

于 2009-06-20T21:57:26.573 回答
0

这不是对确切问题的直接解决方案,但隐藏这些帖子的一种方法是将它们分配到一个特殊类别,然后隐藏该类别,使其不显示在循环中。要从显示中排除给定类别的帖子,请在循环内(紧接在 while() 语句之后)使用以下代码行:

<?php if (in_category('3')) continue; ?>

在此示例中,3 是要排除的类别的类别 ID,代码只是告诉 WordPress 继续下一篇文章而不显示此文章。

于 2009-06-16T15:06:08.207 回答