获取最新的5个帖子和一个特定的帖子,并按特定的顺序排序

时间:2016-05-24 作者:sb0k

我正在寻找一些关于如何创建图像库的建议。这是一个特别的图库,因为我会按照特定的顺序显示最后5篇文章和一篇固定文章,总共6篇文章。固定岗位必须排在名单的第三位。我认为唯一可以创建3个循环的方法是,第一个可以看到最后两个帖子,第二个可以显示固定帖子(通过id),第三个可以看到其他最后三个帖子。类似这样的情况(很可能是不正确的):

        <?php $my_query = new WP_Query( \'posts_per_page=2\' ); // get the latest 2 posts
            while ( $my_query->have_posts() ) : $my_query->the_post();
            $do_not_duplicate = $post->ID; 
        ?>
            <?php the_title(); ?>

        <?php endwhile; ?>

        <?php $my_query2 = new WP_Query( \'p=1\' ); // get fixed post with id=1
            while ( $my_query2->have_posts() ) : $my_query2->the_post();
        ?>
            <?php the_title(); ?>

        <?php endwhile; ?>

        <?php $my_query3 = new WP_Query( \'posts_per_page=3\' ); // get the latest 3 posts
            while ( $my_query3->have_posts() ) : $my_query3>the_post();
            if ( $post->ID == $do_not_duplicate ) continue; // don\'t show the same post of the first loop
        ?> 

            <?php the_title(); ?>

        <?php endwhile; endif; ?>
考虑到页面中已经有一个循环,有一种不同的方法来实现这一点,而无需执行许多循环?

非常感谢。

2 个回复
最合适的回答,由SO网友:Luis Sanz 整理而成

如果不使用SQL,我想不出一种方法可以在一个查询中获得最新的5篇文章和一篇特定的文章。

如果您不介意使用两个查询,我认为这将是一种简单的方法来实现您的目标:

//Get the latest 5 posts (which happens to be get_posts default \'posts_per_page\' value)
$posts = get_posts();

//Build up an array with the IDs
$latests_posts_ids = wp_list_pluck( $posts, \'ID\' );

//Insert the desired ID in the third position
$post_id_to_insert = 1;
$insert_position = 2; //which equals 3 when starting from 0
array_splice( $latests_posts_ids, $insert_position, 0, $post_id_to_insert );

//Get the posts based on the IDs and do not alter their order
$args = array(
    \'posts_per_page\' => 6,
    \'post__in\' => $latests_posts_ids,
    \'orderby\' => \'post__in\'
);

$posts = get_posts( $args );

//Parse the posts
foreach( $posts as $post ) :

    setup_postdata( $post );
    the_title();

endforeach;
我正在使用get_posts() 但您可以安全使用WP_query 相反

WordPress已在中处理可能的重复项post__in, 如果你想插入的帖子是最新的5篇文章之一,情况就是这样。

SO网友:AntonChanning

一种方法是使用内置计数器告诉您已通过循环多少次,然后使用get_post 在固定帖子id上,一旦你经历了3次。。。

 <?php 
        $my_query = new WP_Query( \'posts_per_page=5\' ); // get the latest 5 posts
        while ( $my_query->have_posts() ) : $my_query->the_post();
        $do_not_duplicate = $post->ID; 
    ?>
        <?php the_title(); ?>

    <?php 
         if(3 == $my_query->current_post) {
             $fixed_post = get_post(1);
             // Do what you need to with $fixed_post...
         }
         endwhile; 
    ?>
有关详细信息,请参阅wordpress开发人员参考get_post 有关详细信息。。。

(根据Milo在评论中的建议,编辑代码以使用内置计数器。)

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>