• このエントリーをはてなブックマークに追加

このページではWordPressの日付(年別・月別・日別)アーカイブのリスト表示:日付関係のアーカイブページへのナビゲーションなどで表示させるリストについて調べた内容やサンプルのコードスニペットを紹介しています。

アーカイブリストを表示

wp_get_archivesを使ってアーカイブリストを表示する。

<?php echo wp_get_archives( ); ?>

年別アーカイブページで前後のアーカイブへのリンクを設定

Not Foundなどを加味せずに、とにかく現在表示している年別アーカイブページに現在の年数を取得して、その年の月別アーカイブリストを表示する。

<ul>
<?php
for ( $i = 1; $i <= 12;$i++ ) {
	?><li><a href="<?php echo home_url('/'); ?>/<?php the_time('Y'); ?>/<?php echo sprintf('%02d', $i); ?>/"><?php echo the_time('Y年'); ?><?php echo $i; ?>月</a></li><?php
}
?>
</ul>

サイドバーには年別アーカイブリストだけを表示しておいて、各年数のアーカイブページからさらに深く月別アーカイブに進で行けるようにする。ただ、アーカイブのないページ。つまりは、今月は更新したけどこの前の月は更新していないって時、そういうときにはNot Foundになってしまう。

年別アーカイブページで前後のアーカイブへのリンクを設定

Not Foundなどの処理を行わない、現在のアーカイブページの年数を元にリンクを設定する方法。
※パーマリンクを/2000/とか/2010/で表示できるように設定している場合に限る

←<a href="<?php echo home_url('/'); ?>/<?php echo get_the_time('Y') - 1; ?>/"><?php echo get_the_time('Y') - 1; ?>年</a> | <a href="<?php echo home_url('/'); ?>/<?php echo get_the_time('Y') + 1; ?>/"><?php echo get_the_time('Y') + 1; ?>年</a>→

表示結果(2019年のアーカイブリスト表示時)

←2018年 | 2020年→

wp_get_archivesという関数

日付アーカイブリスト表示:wp_get_archivesのタグを使って表示させるサンプルです。

現在の月を取得して、今年の1月~例えば6月なら6月までのリストを表示させたいって時。以下の通りにすればいい。

注意点として、日本だとロンドン時間になると都合が悪いので、dateという関数は使っちゃダメ。WordPressでは日本の時間を取得せずに-9時間、つまり世界の標準時間を取得するのでずれる。月別アーカイブなのである意味誤差やけども、きっちりしましょ。

<?php
// これやと一番古い日付から6月だった時に:6ヶ月分表示されることになる。
echo wp_get_archives(
	array(
		'order' => 'DESC',
		'limit' => date_i18n('n'), // WordPressでは現在の日付を正しく取得するためにdate_i18nを使うこと。ロンドン時間になるので、PHPのdate()はつかっちゃだめ
		'type' => 'monthly'
	)
);
?>
  1. 2019年6月
  2. 2019年5月
  3. 2019年4月
  4. 2019年3月
  5. 2019年2月
  6. 2019年1月

上記だとちゃんと取得できるが、降順に表示されるので、困る。だったら、昇順にしてみましょということで、次のサンプル。

意図しない現在の月別アーカイブリスト

取得したいのは次の通り。逆にしたかったの。

  1. 2019年1月
  2. 2019年2月
  3. 2019年3月
  4. 2019年4月
  5. 2019年5月
  6. 2019年6月

新しい順(日付でいうと降順:年数や月日が大きい順)にアーカイブリストは表示される。そのため、現在の月を指定したらええ感じに表示されるかと思ったら、単に6ヶ月最古のアーカイブリストを表示させるということに。

まぁ、そりゃそうやわな。

<?php
// これやと一番古い日付から6月だった時に:6ヶ月分表示されることになる。
echo wp_get_archives(
	array(
		'order' => 'ASC',
		'limit' => date_i18n('n'),
		'type' => 'monthly'
	)
);
?>

そもそも、自分で関数作って書いたほうが早いんじゃね?

パーマリンクが変更されないという前提で、日付アーカイブリストを今年の文だけ表示させるようにしてみた。

問題

  • 日付アーカイブで投稿されていない月は表示しない
  • 1月~12月の表示するが、今年の6月なら6月まで
  • 過去の2018年とかは1月~12月表示したい
  • 年別アーカイブのみ表示する

いろいろやっていると、投稿されていない月を省く処理などが面倒なのがわかってきた。