Ignore latest two posts

时间:2017-08-25 作者:hello123

我试图从一个页面中排除最近的两篇博客文章。我知道这是可能的offset 然而,这样做会导致一个bug,其中一些博客帖子会在第二页上重复,因此并不理想。目前,我正在使用post id手动执行此操作,如下所示:

$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : \'1\';
$args = array(
    \'posts_per_page\' => 5,
    \'post__not_in\'   => array(827, 809),
    \'post_status\'    =>"publish",
    \'post_type\'      =>"post",
    \'orderby\'        =>"post_date",
    \'cat\'            =>\'-1, -8, -9, -7, -6, -5, -4\',
    \'paged\'          => $paged
);

$postslist = get_posts( $args );
echo \'<div class="latest_new_posts main-news">\';
有谁能想出一个更好的方法来做到这一点,我不必不断调整帖子id?

2 个回复
SO网友:Johansson

您可以使用offset 排除最新帖子。您的论点可以是:

$args = array( 
    \'posts_per_page\' => 5, 
    \'offset\' => 2, 
    \'post__not_in\' => array(827, 809),
    \'post_status\'=>"publish",
    \'post_type\'=>"post",
    \'orderby\'=>"post_date",
    \'cat\'=>\'-1, -8, -9, -7, -6, -5, -4\',
    \'paged\'=> $paged
);
但是,正如您所提到的,它将破坏分页。有一个变通方法,如codex, 它提供了一个解决方案。

使用pre\\u get\\u posts,您可以通过使用pre_get_posts 过滤器:

function exclude_latest_post( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'offset\', \'1\' );
    }
}

add_action( \'pre_get_posts\', \'exclude_latest_post\', 1 );
您可以查看codex页面中的备选方案,我跳过了它,因为它很长,并且在codex上有很好的解释。

SO网友:phatskat

您可以使用两个查询来实现这一点,这有点笨重,但并非完全不合理。

获取两篇最近的帖子

<?php

$most_recent_args = array(
    \'posts_per_page\' => 2,
    \'paged\'          => 1,
    \'fields\'         => \'ids\',
    \'orderby\'        => \'post_modified\',
    \'order\'          => \'DESC\',
);

$most_recent = new WP_Query( $most_recent_args );
然后,您可以使用那里的结果。。。

使用最近的两篇帖子修改您的查询

$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : \'1\';

$args = array(
    \'posts_per_page\' => 5,
    \'post__not_in\'   => $most_recent->posts,
    \'post_status\'    =>"publish",
    \'post_type\'      =>"post",
    \'orderby\'        =>"post_date",
    \'cat\'            =>\'-1, -8, -9, -7, -6, -5, -4\',
    \'paged\'          => $paged
);

$postslist = get_posts( $args );
echo \'<div class="latest_new_posts main-news">\';

结束

相关推荐

Ordering posts by an array

我有一个查询,它返回许多不同的自定义帖子类型。我想按帖子类型数组的内容对帖子数组进行排序;e、 g。array(\'post\', \'video\', \'testimonial\'..... );数组(顺序)是固定的。如何在不对每种职位类型进行不同查询的情况下管理此问题?