WordPress - 如何获得循环的第n个帖子?

时间:2013-02-08 15:46:44

标签: wordpress

我按照自定义字段值的降序排序帖子,我想知道是否有办法按降序查找第n个帖子。

示例,顺序是:

1st from top: id = 9
2nd from top: id = 5
3rd from top: id = 6

现在,我正在使用get_template_part()来展示帖子。

我想知道是否有get_template_part_of_post(3rd-from-top)的内容。

<div class="onethird">

                    <?php


                    $count_posts = wp_count_posts("ott_products", "");
                    $published_posts_orig = $count_posts->publish;
                    $published_posts = $published_posts_orig +  (3 - ($published_posts_orig % 3));


                    $i = 0;

                    if ( have_posts()) : while($query->have_posts()) :

                        echo $i . " " . $published_posts;
                        $i = $i + 3;
                        $query->the_post();

                        get_template_part( 'content', 'category' );

                        if ( $i % 3 === 2 ) :
                            if ( ($i - 2 == $published_posts) ) :
                                $i = 3;
                        endif; endif;

                        if ( $i % 3 === 1 ) :
                            if ( ($i - 1 == $published_posts) ) :
                                echo "</div><div class='onethird last'>";
                                $i = 2;
                        endif; endif;

                        if ( $i % 3 === 0 ) :
                            if ( ($i == $published_posts) ) :
                                echo "</div><div class='onethird'>";
                                $i = 1;
                        endif; endif; 


                    endwhile;

                    else :

                        get_template_part( 'no-results', 'archive' );

                    endif;  

                    ?>


            </div>

这就是我目前正在使用的。这将帖子分为三列。

变量i将从三列中向上和向下变为从左到右。

之前,我的帖子显示如下:

(Total 9 posts)
1  4  7
2  5  8
3  6  9

有了它,我得到i

(Total n posts)
1  2  3
4  5  6
...

现在,问题是我无法显示i个帖子。帖子仍然是的第一顺序。

3 个答案:

答案 0 :(得分:1)

获取nth帖子的最简单方法是执行以下操作:

global $posts;

// This gets your nth level post object.
if( isset( $posts[ $nth_post ] ) )
    echo $posts[ $nth_post ]->post_title;

我希望这会有所帮助。 :)

答案 1 :(得分:0)

您可以先使用total_posts = wp_count_posts()来计算帖子数量。

然后你必须运行“循环”并为每个帖子保留一个计数器,当该计数器达到total_posts - N时,执行你想要的动作:

伪代码:

total_posts = wp_count_posts();
count = 0;
while(have_posts()) {
   count++;
   if (count = total_posts - N) {
       // ACTION       
   }
   the_post();
}

答案 2 :(得分:0)

get_template_part()完全按照它说的做,它会获得一个位于主题文件夹中的模板。它接受的唯一参数是slug和名称(参见WordPress codex

如果我理解正确,你想每次都获得第三篇帖子吗?最简单的方法是在模板文件中设置计数器和条件,可能是loop-something.php

$i = 0;

if ( have_posts()): 

while (have_posts()) : the_post();

  if ($i % 3 == 0):
    // Do something different, this is the first column.
    // I propose:
    $column = 1;

  elseif ($i % 3 == 1):
    // Do something different, this is the second column.
    $column = 2;

  elseif ($i % 3 == 2):
    // Do something different, this is the third column.
    $column = 3;
  endif;

  echo '<div class="column-'.$column.'">';
  // the post
  echo '</div>';

  $i++;

endwhile;

else:

  get_template_part( 'no-results', 'archive' );

endif;