WordPress Tips

current_postを使って特定数の投稿の時に処理する

2019-09-09

本記事にはプロモーションが含まれています。

current_postを使って特定数の投稿の時に処理する

ソラミ♪

Webエンジニアをやりつつ、デザインにも携わる株式会社コムワークの中の人。WordPress、Adobeアプリ、カワウソ好き。 2015年から当ブログ運営|2008年からGmail使用中|WordPress制作10年以上|15社以上のレンタルサーバー利用経験|100件以上のドメイン取得運用|サイト・ドメイン移転多数 »  もっとくわしく

WP_Queryクラスのcurrent_postプロパティを使って、ループ内で現在の投稿が何番目の投稿かを取得していろいろやりたいときのメモです。

current_postを使って、ループ内の何番目の記事かカウントする

<?php
if ( have_posts() ) :while ( have_posts() ) :the_post();
  $count = $wp_query->current_post + 1;
  echo $count;
 endwhile;
endif;
?>

WP_Queryクラスの中に格納されているcurrent_postを使います。

$count = $wp_query->current_post + 1; は、ループ内で現在の投稿のインデックス(0から始まる)を取得し、それに1を加えて1から始まる順序付けされたインデックスを取得します。

何番目の記事かをカウントすれば、「n番目の記事の時にxxxしたい」ということも簡単ですね。

current_postはサブループでも利用することができます。

current_postを使って最初の投稿かどうかを判定して特別な処理をする

ループ内で「最初の記事の時だけ大きく表示したい」というのはよくあります。そんな時に有効です。

<?php if (have_posts()) : while (have_posts()) : the_post();
      if ($wp_query->current_post == 0) :
      // 最初の投稿の時
      endif;
      // 通常の投稿
    endwhile;
 endif;
?>

最後の投稿を判定するには

current_postとは関係しませんが最後の投稿か判定する場合も載せておきます。

<?php
if ( have_posts() ) :
    $total_posts = $wp_query->found_posts;
    $current_post = 0;
    while ( have_posts() ) :
        the_post();
        $current_post++;
        if ( $current_post === $total_posts ) {
            // 最後の投稿にclassを追加する
            $class = 'last-post';
        } 
?>
    <div class="<?php echo $class; ?>">
        <?php the_title(); ?>
    </div>
<?php
    endwhile;
endif;
?>

$total_posts = $wp_query->found_posts;現在のクエリによって見つかった全体の投稿数を取得します。

post_countとfound_posts

  • found_posts
    現在のクエリによって見つかった、全体の投稿数。
  • post_count
    現在のクエリによって取得された投稿のうち、現在のページで表示される投稿の数。ページネーションがある場合、1ページに表示される投稿数によって異なる。

公式リファレンスWP_Query - WordPress Developer Resources

current_postで投稿インデックスの偶数奇数を判定する

投稿記事の偶数、奇数でグループ分けして、それぞれに異なるスタイルを適用するためのクラスを割り当てたい。。。という時など。

<?php
    if ( have_posts() ) :while ( have_posts() ) :the_post();
        if(($wp_query->current_post + 1) % 2 == 0):
            $class = 'even';
        else:
            $class = 'odd';
        endif;
?>
  <div class="<?php echo $class; ?>"><?php the_title(); ?></div>
<?php
    endwhile;
endif;
?>

N件ごとに処理を加える

wordpressのプロパティcurrent_postを使う例として「投稿数N件ごとにdivで囲みたい」場合。

<?php
$col = 4; // グリッドの列数
if (have_posts()) :
    while (have_posts()) :
        the_post();
        if (0 === ($wp_query->current_post) % $col) : // グリッドの列の最初の投稿かどうかをチェック
?>

    <div class="grid">

<?php
        endif;
?>

//ループ内の表示
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<?php the_content('Read more...'); ?>
</article>

<?php
        if (0 === ($wp_query->current_post + 1) % $col || ($wp_query->current_post + 1) === $wp_query->post_count) : // グリッドの列の最後の投稿かどうかをチェック
?>
            </div>


<?php
        endif;
    endwhile;
endif;
?>

変数colに代入された数字ごとに <div class="grid"></div>で囲むようにします。

  • この記事を書いた人
  • 最新記事

ソラミ♪

Webエンジニアをやりつつ、デザインにも携わる株式会社コムワークの中の人。WordPress、Adobeアプリ、カワウソ好き。 2015年から当ブログ運営|2008年からGmail使用中|WordPress制作10年以上|15社以上のレンタルサーバー利用経験|100件以上のドメイン取得運用|サイト・ドメイン移転多数 »  もっとくわしく

-WordPress Tips