0

カスタム フィールド値の降順で投稿を並べ替えています。降順で 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>

これは私が現在使用しているものです。これにより、投稿が 3 つの列に分割されます。

変数iは、3 列で上から下、左から右に変化します。

以前は、投稿が次のように表示されていました。

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

これで、次のことができますi

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

iさて、問題は投稿を表示できないことです。投稿はまだ最初の順序で来ます。

4

3 に答える 3

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();
}
于 2013-02-08T15:58:14.703 に答える
0

get_template_part()テーマ フォルダにあるテンプレートを取得します。受け入れる唯一の引数は、スラッグと名前です ( WordPress codexを参照) 。

私の理解が正しければ、毎回 3 番目の投稿をフェッチしてもらいたいですか? 最も簡単な方法は、テンプレート ファイルにカウンターと条件を設定すること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;
于 2013-02-08T16:01:16.293 に答える