WordPressの年別アーカイブページで「次の年」「前の年」のリンクを表示する方法

WordPressのarchive.phpのような年別アーカイブページで、「次の年」「前の年」のようなリンクを表示する方法です。

まず、functions.phpに次のように関数を記述します。

//次の年のリンクを取得
function get_next_year_link() {
	$this_year = intval( get_the_time( 'Y' ) );
	$next_year = $this_year + 1;
	//次の年に投稿があるか調べる
	$args = array(
		'year' => $next_year,
	);
	$the_query = new WP_Query( $args );
	if ( $the_query->have_posts() ) {
		return get_year_link( $next_year );
	}
}

//前の年のリンクを取得
function get_prev_year_link() {
	$this_year = intval( get_the_time( 'Y' ) );
	$prev_year = $this_year - 1;
	//前の年に投稿があるか調べる
	$args = array(
		'year' => $prev_year,
	);
	$the_query = new WP_Query( $args );
	if ( $the_query->have_posts() ) {
		return get_year_link( $prev_year );
	}	
}

 

次に、archives.phpのようなテンプレートファイルでリンクを表示したい箇所に下記を記述します。

<?php if( get_next_year_link() ): ?>
<a href="<?php echo get_next_year_link(); ?>">次の年へ</a>
<?php endif; ?>

<?php if( get_prev_year_link() ): ?>
<a href="<?php echo get_prev_year_link(); ?>">前の年へ</a>
<?php endif; ?>

 

もし、index.phpのようにテンプレートファイルを共通化している場合は、次のようにif文に is_year() を追加すれば、年別アーカイブの時だけ表示されるようになります。

<?php if( get_next_year_link() && is_year() ): ?>
<a href="<?php echo get_next_year_link(); ?>">次の年へ</a>
<?php endif; ?>

<?php if( get_prev_year_link() && is_year() ): ?>
<a href="<?php echo get_prev_year_link(); ?>">前の年へ</a>
<?php endif; ?>

 

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン