如何从档案中隐藏帖子

时间:2013-05-16 作者:Ashutosh

我想使用“private”选项隐藏WordPress文章的存档页面。我只想把这篇文章从档案中隐藏起来,但对公众可见。我该怎么做?

2 个回复
SO网友:Chip Bennett

您需要通过以下方式筛选主查询pre_get_posts 回调。

如果您只想以这种方式处理一篇特定的帖子,那么可以直接引用/排除其帖子ID。但是,如果您希望将来的任何私人帖子都具有相同的行为,那么我将使用$post->post_status 属于private, 并将其排除在外。

一个岗位(其中ID=123):

function wpse99672_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        $query->set( \'post__not_in\', array( 123 ) );
    }
}
add_action( \'pre_get_posts\', \'wpse99672_filter_pre_get_posts\' );
或者,对所有人来说private 职位:

function wpse99672_filter_pre_get_posts( $query ) {
    if ( ! is_singular() && $query->is_main_query() ) {
        // Query all post objects for private posts
        $private_posts = new WP_Query( array( \'post_status\' => \'private\' ) );
        // Extract post IDs
        // Note: for performance, you could consider
        // adding this array to a transient
        $private_post_ids = array();
        foreach ( $private_posts as $obj ) {
            $private_post_ids[] = $obj->ID;
        }
        $query->set( \'post__not_in\', $private_post_ids );
    }
}
add_action( \'pre_get_posts\', \'wpse99672_filter_pre_get_posts\' );

SO网友:Fernando Silva

我认为最简单的方法是控制archive.php 文件,如果这只是一篇你想从档案中隐藏的帖子。

$query = new WP_Query( \'p=-7\' );
其中7是要隐藏的帖子的post\\u ID,以及- 符号指定要将其从循环中排除。

看看this link 这解释了可以传递的用法和参数,以防您想进一步了解您的问题所建议的内容。

Herehere 您可以找到其他方法来完成我提到的内容。

--- Update ---

考虑到托肖的评论,我dug around a bit 下面是如何在pre_get_posts():

function exclude_post( $query ) {
    if ( is_archive() ) {
        $query->set( \'p\', -7 );
        return;
    }//end if
}//end function
add_action( \'pre_get_posts\', \'exclude_post\' );

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W