プラグインなしでWordPressに関連記事を表示する

WordPressで詳細ページの下の方にある「関連記事」を追加します。コピペだけで実装できるとのでとっても簡単です。プラグインなしです! もちろん簡単な解説もしていきますよ!

さっそくですが、コードはこちら!

<?php
$categories = get_the_category($post->ID);
$category_ID = array();

foreach($categories as $category){
	array_push($category_ID,$category->cat_ID);
}

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);
$wp_query = new WP_Query($args);

if($wp_query->have_posts()){
	while($wp_query->have_posts()):$wp_query->the_post();
	// ここにループの内容を書きます
	endwhile;
}else{
	// ここに関連記事がないときの内容を書きます
}
?>

これから少々解説を入れていきますが、面倒な方は読まずにコードだけコピペしてもらってもOKですよ!

コードの解説

上記のコードで一番大事なところの解説をしますね。正直、他の部分は決まり文句なんであまり気にしなくてもいいですよー。

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

表示する件数について

まずはこの1行目ですが、書いてある通り関連記事を表示したい件数を入れます。ハイライトしてある7行目に変数を使って入れています。

なぜ、7行目に直接件数を入れていないかと言うと単純に上の方に書いておけば後で件数を変えるときに分かりやすいかなって思ってです。

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

関連記事から現在の投稿を除外する

関連記事に現在の投稿は入ってきて欲しくないですよね? この4行目が現在の投稿を除外してくれますので入れておきましょう。不要なことはないと思いますが…

ちなみに「post__not_in」はCodexのこちらに書かれていますので一度読んでおくとよりわかりやすいのではないかと思います。

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

どのカテゴリーの記事を取得するか選択する

ハイライトしてある5行目です。

正確に言うと、「関連記事で表示するカテゴリーを現在の投稿から選択する」というちょっとややこしいですが単純に「現在の投稿のカテゴリーから関連記事を選ぶ」ということです。

あんまり必要ないと思いますが、別のカテゴリーの記事を表示することもできます。

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

並び順を決める

ハイライトしている6行目です。

$posts_number = 4; // ここに表示したい件数を入れます

$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'rand', // ランダムに並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

「orderby」は並び順を決めるものです。詳細はこちらで書かれています。

使い方は、下記のように変更します。

$posts_number = 4; // ここに表示したい件数を入れます
 
$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'orderby'=>'DESC', // 降順に並べます
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

こうすることで「降順」つまり、投稿の新しいものから古いものの順に並びます。

ただ、「’orderby’=>’DESC’,」はデフォルトなので書かなくても問題ありません。消した場合は以下の通りです。

$posts_number = 4; // ここに表示したい件数を入れます
 
$args = array(
	'post__not_in'=>array($post->ID), // 現在のページの投稿を除きます
	'category__in'=>$category_ID, // 現在の投稿のカテゴリーの関連記事を取得します
	'posts_per_page'=>$posts_number, // 表示する件数の指定
);

今回、関連記事を表示するために必要な部分だけ解説させていただきました! コピペですぐ終わっちゃいますね。

コメントはこちらから

コメントは承認後に表示されます

未入力は匿名になります