【WordPress】記事一覧で年別タイトルをつける

2021年
01.01 記事タイトル
08.02 記事タイトル
10.20 記事タイトル

2020年
01.05 記事タイトル
07.15 記事タイトル
11.31 記事タイトル

みたいな記事一覧を年のタイトルで区切りたいときに使うもの。

関数を作る

<?php
function yearArchive($year)
{
    $newslist = new WP_Query(array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'year' => $year
    ));
    if ($newslist->have_posts()) :
?>
        <div class="list">
            <h2><?php echo $year; ?>年</h2>
            <?php while ($newslist->have_posts()) :
                $newslist->the_post();
            ?>
                <?php
                $cat = get_the_category();
                $cat = $cat[0];
                $slug = $cat->slug;
                ?>

                <dl class="<?php echo $slug; ?>">
                    <dt><?php echo get_post_time('Y.m.d'); ?></dt>
                    <dd>
                        <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
                    </dd>
                </dl>

            <?php endwhile; ?>
        </div>
    <?php endif;
    wp_reset_postdata();
    ?>
<?php
}
$thisyear = date('Y');
for ($year = $thisyear; $year >= 2010; $year--) {
    yearArchive($year);
}
?>
function 〇〇($arg_1, $arg_2,…) { }(PHP)ユーザー定義関数。関数を作る。
WP_Query()サブループを作り、投稿を取得する。
for (式1; 式2; 式3) { }(PHP)式1:ループ開始時に実行
式2:各繰り返しの開始時に実行
式3:各繰り返しの後に実行
$a – –(PHP)後置減算子。 $a を返し、$a から 1 を引く。
※PHP は C 言語の加算子/減算子と同じ

ほぼ参考サイトのコピペなのですが、ユーザー定義関数とPHPについてめちゃめちゃ理解が深まりました。便利…ありがとうございます…

(追記)関数を作らない場合

いろんな場所で使い回す必要がないのであれば、関数を作らずに下記を任意の場所に書いても表示できます。

for文の「$year >= 2021」の部分を開始したい年に設定すればOK。

<?php
							$thisyear = date('Y');
							for ($year = $thisyear; $year >= 2021; $year--) {
								$newslist = new WP_Query(array(
									'post_type' => 'post',
									'posts_per_page' => -1,
									'year' => $year
								));
								if ($newslist->have_posts()) :
							?>
									<li>
										<h3><?php echo $year; ?>年</h3>
										<ul class="month">
											<?php while ($newslist->have_posts()) :
												$newslist->the_post();
											?>
												<li>
													<h4>
														<a href="<?php the_permalink() ?>">
															<?php the_title(); ?></a>
													</h4>
												</li>
											<?php endwhile; ?>
										</ul>
									</li>
							<?php endif;
								wp_reset_postdata();
							} ?>

(追記2)wp_get_archives関数を使う場合

年別アーカイブを生成したくてwp_get_archivesを使っている時に「これでもいけるのでは…?」と思ったので調べてみると、この関数で月別アーカイブを年別にまとめている方がいらっしゃいました(→ https://cosybench.com/customize-wp-archives-look/)。

生成したアーカイブリンクひとつひとつをPHPの配列として操作しているようです。
結果ちょっと複雑になるかな〜思いましたが、よりカスタマイズしたい場合はこちらも良さそうです。

参考