从wordpress自定义查询中排除重复的帖子

时间:2013-11-27 15:14:45

标签: wordpress posts

我正在为主页创建一个模板,其中显示了4个最新帖子以及一些帖子组按页面分类(我使用get_posts执行查询)。

我想做的是从这些类别帖子中排除最新四条新闻中已有的帖子。

我想我应该获得这四个帖子ID并在“类别”查询中使用“post__not_in”参数,但我无法使其正常工作。

你有任何提示吗?

这是代码:

// First query: I get last four posts

$args = array(

    'post_type'        => 'post',
    'post_status'      => 'publish',
    'numberposts'           => 4

);

// In my dreams, this should be the array of post IDs

$ids->query_vars['page_id'];

// Second query: I get 5 posts for a given categoory and exclude posts with IDs from first query

$query = new WP_Query($args);

$args2 = array(

    'numberposts'   => 5,
    'category'         => 15,
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'post__not_in' => $ids

);
$query2 = new WP_Query($args2);

$primaposizione = get_posts( $args2 );
foreach ( $primaposizione as $post ) : setup_postdata( $post );

... do the stuff ...

endforeach;
wp_reset_postdata();

更新

<?php
    $args = array(
    'post_type'        => 'post',
    'post_status'      => 'publish',
    'orderby'          => 'post_date',
    'order'            => 'DESC',
    'posts_per_page'           => 4
    );

    $query = new WP_Query($args);
    $excludeID = array();
    while ( $query->have_posts() ) : $query->the_post();
    $excludeID = $post->ID;
    endwhile;

        $args = array(
            'posts_per_page'   => 1,
            'orderby'          => 'post_date',
            'order'            => 'DESC',
                    'category'         => 15,
            'post_type'        => 'post',
            'post_status'      => 'publish',
            'post__not_in' => array($excludeID)
        );

        $primaposizione = get_posts( $args );
        foreach ( $primaposizione as $post ) : setup_postdata( $post );
        $category = get_the_category();
        $slug = $category[0]->category_nicename ;
        $esteso = $category[0]->cat_name;
        if(has_post_thumbnail()) { ?>
            <span class="hidden-xs"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('bones-thumb-300', array('class' => 'img-responsive')) ?></a></span>
            <?php } ?>
            <h3 class="ellipsis"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
            <?php the_excerpt();?>
        <?php endforeach;
    wp_reset_postdata();
?>

1 个答案:

答案 0 :(得分:0)

您尝试选择ID的方式不起作用。你必须先调用wp_query。我认为这应该有效:

$args = array(
    'post_type'        => 'post',
    'post_status'      => 'publish',
    'numberposts'           => 4
);

$query = new WP_Query($args);
$excludeID = array();

while ( $query->have_posts() ) : $query->the_post(); ?>
     $excludeID[] = $post->ID;       // forgot the brackets
     // do stuff
endwhile;

(...)