Top

メモ書き

以前、記事にナンバリングする方法を紹介していますが、それとはまた違う書き方で実現しました。

以前紹介した方法は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ページを気にしなくてもいいのならこちらを使っても◎