wordpress WordPress 最新の投稿を古い順(昇順)に表示

2021年5月16日

最新の投稿を指定した件数、古い順(昇順)に表示する方法の覚書です。

最新の投稿を古い順に取得するには、2段階で取得します(もっと良い方法があるかも知れません)。

最初にすべての投稿を取得して found_posts で投稿の全件数を取得します。

そして一度 wp_reset_postdata() で $post の値を元に戻します。

再度 WP_Query を使ったサブループのクエリのパラメータ(投稿を取得するための条件)で、offset(投稿の先頭からスキップする件数)に「投稿の全件数から表示する件数を引いた値」を指定して 昇順(古い順)で投稿を取得します。

以下は最新の投稿を5件、古い順に表示する例です。

<?php
//すべての投稿を取得
$my_query = new WP_Query( array(
  'post_type' => 'post',
) );
//投稿の全件数
$my_found_posts = $my_query->found_posts;  
//$post の値を元に戻す
wp_reset_postdata();  
 
//表示する件数を指定
$my_posts_per_page = 5; 
  
$args = array(
  //投稿の全件数から表示する件数を引いた値をオフセットに指定
  'offset' => $my_found_posts - $my_posts_per_page,
  'posts_per_page' => $my_posts_per_page,
  'order' => 'ASC',   //昇順(古い順)
);
$my_query = new WP_Query( $args );
?>
<?php if ( $my_query->have_posts() ) : ?>
  <ul>
  <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  <?php endwhile; ?>
  </ul>
<?php endif; ?>
<?php wp_reset_postdata(); ?>  

以下はカテゴリーが events の最新の投稿を5件、古い順に取得する例です。

<?php
//すべての投稿を取得
$my_query = new WP_Query( array(
  'post_type' => 'post',
  'category_name'=>'events', //カテゴリーを指定
) );
//カテゴリーが events の投稿の全件数
$my_found_posts = $my_query->found_posts;  
//$post の値を元に戻す
wp_reset_postdata();  
 
//表示する件数を指定
$my_posts_per_page = 5; 
  
$args = array(
  //カテゴリーが events の投稿の全件数から表示する件数を引いた値をオフセットに指定
  'offset' => $my_found_posts - $my_posts_per_page,
  'posts_per_page' => $my_posts_per_page,
  'category_name'=>'events', //カテゴリーを指定
  'order' => 'ASC',  //昇順(古い順)
);
$my_query = new WP_Query( $args );
?>

関連ページ:WordPress のループ(投稿の並び順を変更)