WordPressの前の記事と次の記事のリンクを現在の記事と同じカテゴリーにする

記事の下に、前の記事・次の記事のリンクが表示されますが、現在の記事と関連ある記事を表示してほしいですよね。

ということで、前の記事・次の記事のリンクを現在の記事と同じカテゴリーの記事のみにする方法を説明します。

この記事で説明する方法は、WordPressテーマの実装によって異なります。
このブログのテーマは「SANGO」を使用しているので、SANGOでは有効ですが他のテーマの場合当てはまらないことがあります。
ですが、使っているWordPressの関数は参考になると思います。

実現方法が似ている記事があるので、こちらもご覧ください。

WordPressで特定のカテゴリーを前の記事と次の記事のリンクに表示させない WordPressで特定のカテゴリーを前の記事と次の記事のリンクに表示させない

やりたいことの図解

やりたいことは「前の記事・次の記事のリンクを、現在読んでいる記事のカテゴリーと同じカテゴリーの記事にする」です。

現在読んでいる記事のカテゴリーが「WordPress」の場合は、前の記事が「Python」カテゴリーの記事なので、前の記事が「WordPress」の記事になるようにしたいです。

現在読んでいる記事のカテゴリーが「Python」の場合は、次の記事が「WordPress」カテゴリーの記事なので、次の記事が「Python」の記事になるようにしたいです。

前の記事・次の記事のリンクを現在の記事と同じカテゴリーにする

変更手順

バックアップをとる

以下の変更方法を見て、必要に応じてバックアップをしてください。

前の記事・次の記事のリンク取得方法を確認する

SANGOはprev-next-entry.phpでget_adjacent_postを使っていました。
root/wp-content/themes/sango-theme/parts/single/prev-next-entry.php

リンクを取得しているphpファイルを子テーマにコピーする

root/wp-content/themes/sango-theme/parts/single/prev-next-entry.php
親テーマと同じパスとなるように、子テーマにコピーする。
存在しないディレクトリは新規作成する。
root/wp-content/themes/sango-theme-child/parts/single/prev-next-entry.php

get_adjacent_post関数の引数$in_same_termにtrueを代入する

引数$in_same_termは1番目の引数です。

FTPソフトで子テーマのprev-next-entry.phpを上書きする

root/wp-content/themes/sango-theme-child/parts/single/prev-next-entry.php
に上書きする。

実装方法

prev-next-entry.phpを変更します。
変更前のprev-next-entry.phpの前半部分は以下のようになっていました。
1番目の引数$in_same_termはfalseになっています。

<?php
	/**
	 * 前の記事へ、次の記事へ
	 */
	$prev_post = get_adjacent_post( false, '', true );
	$next_post = get_adjacent_post( false, '', false );
if ( $prev_post || $next_post ) :
	?>
<div class="prnx_box">
※以降、省略。

次のように変更してください。
1番目の引数$in_same_term=trueにすることで、同じカテゴリーのリンクが選ばれます。

<?php
	/**
	 * 前の記事へ、次の記事へ
	 */
	$prev_post = get_adjacent_post( true, '', true );
	$next_post = get_adjacent_post( true, '', false );
if ( $prev_post || $next_post ) :
	?>
<div class="prnx_box">
※以降、省略。

使用したWordPressのget_adjacent_post関数の仕様を載せておきます。

変更結果

現在読んでいる記事のカテゴリーが「WordPress」の場合は、前の記事も次の記事も「WordPress」の記事になりました。

現在読んでいる記事のカテゴリーが「Python」の場合は、前の記事も次の記事も「Python」の記事になります。
しかし、現在の記事以降に「Python」カテゴリーの記事がまだ無い場合は以下のように次の記事は表示されません。