以前、記事にナンバリングする方法を紹介していますが、それとはまた違う書き方で実現しました。
以前紹介した方法はsingleページでも有効というのが良いところでした。
また、 01 ,02 ,03 ,04 ,05…とふつうの?数え方をして数字を記事ごとにあてていましたが、今回は05 ,04 ,03 ,02…と減っていく数字をあてています。
記事の総数を取得し-1ずつの逆からナンバリングする方法
さっそく結論となるコードを。
<?php
$args = array(
'post_type' => 'case',
'posts_per_page' => -1,
'meta_key' => 'c_supply',
'orderby' => 'meta_value',
'order' => 'DESC',
'post_status' => 'publish',
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<div class="articleWrap">
<?php
$num_posts = wp_count_posts('case');
$count = $num_posts->publish;
while ($the_query->have_posts()) : $the_query->the_post();
?>
<article>
<a href="<?php the_permalink() ?>">
<div class="">
<p class="">
<?php
$count = sprintf("%02d",$count); // 一桁を二桁に
echo $count;
$count--;
?>
</p>
</div>
<h1><?php the_title(); ?></h1>
</a>
</article>
<?php endwhile; ?>
</div>
<?php else: ?>
//記事がないときの記述
<?php endif; wp_reset_query(); ?>
今回の事例は、実績(case)を記事の投稿順ではなく、ACFの日付選択ツールの順番で並べたいという要望でした。日付選択ツールのフィールド名は c_supply です。
‘meta_key’ => ‘c_supply’ , ‘orderby’ => ‘meta_value’, で日付選択ツールの情報で’order’ => ‘DESC’,並び方で並べています。
そして本題の減少するナンバリング。
減少する = 元となる数値が必要 → (カスタム投稿 case の)記事の総数 となります。
まず15,16行目でcaseの記事の総数を取得し、$countに入れています。
24,25行目で2桁に変換と出力を行い、出力後の26行目で-1をしておきます。
これが繰り返されることで、$countの中の数が減っていき05 ,04 ,03 ,02…と減少するナンバリングができるというわけです。
ちなみに、これはよくあるループ処理のカウント方法を応用したものになります。
一応、応用前の基本的なループ処理のカウント方法も書いておきます。
ACF繰り返しフィールドなどで使用できる、ループ処理のカウント方法
<?php if ($fieldNames) : ?>
<ul class="list-reason">
<?php
$count = 1;
foreach ($fieldNames as $fieldName) :
?>
<li>
<?php
$count = sprintf("%02d",$count); // 一桁を二桁に
echo $count;
$count++;
?>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
foreachを使ってみましたが、もちろんwhile文でも使えます。
$countに1を入れて、足していくので $count++; となるわけです。singleページを気にしなくてもいいのならこちらを使っても◎