simplicity2の関連記事に子カテゴリの記事のみ表示する

珍しく wordpress ネタを。。。

スポンサーリンク

前置き

このブログはもともと技術系のネタのみ書いていたのですが、5年もやっているうちに内容が雑多になってきて収拾が付かなくなってきました。

別のブログに分離することも考えたのですが、面倒なのでカテゴリわけでなんとかしようということで、年末年始の休暇を利用してカテゴリを切り直しました。

で、カテゴリを

  • 親カテゴリ1
    • 子カテゴリ1-1
    • 子カテゴリ1-2
    • 子カテゴリ1-3
  • 親カテゴリ2
    • 子カテゴリ2-1
    • 子カテゴリ2-2
    • 子カテゴリ2-3
  • 親カテゴリ3
    • 子カテゴリ3-1
    • 子カテゴリ3-2
    • 子カテゴリ3-3

という構成にしました。

使用しているテーマ(simplicity2)では、各記事の下に関連記事一覧が表示されるのですが、これは同じカテゴリに属している記事をランダムで表示しています。

今回、カテゴリを切り直して気がついたのですが、関連記事一覧には親子関係の概念がなく、親カテゴリの記事も関連記事として表示されてしまうようです。

ということで、関連記事に子カテゴリの記事を優先的に表示するようにいじってみました。

カスタマイズ方法

管理メニュー → テーマの編集 → テーマのための関数 (functions.php)
を選択します。

※子テーマを作っていない場合は作った方が良いです。simplicityの配布元に色々書いてあるのでそちらを参照してください。

490行目付近の
function get_related_wp_query_args(){
を変更します。

phpはよくわからないけどこれでうまくいきました。もっと上手い方法があれば教えてください。

if ( is_related_entry_association_category() ) {
	//カテゴリ情報から関連記事をランダムに呼び出す
	$categories = get_the_category($post->ID);
 
	// 子カテゴリを取得	
	$category_IDs = array();
	foreach($categories as $category):
		if($category->parent) {
			array_push( $category_IDs, $category -> cat_ID);
		}
	endforeach ;
 
	// 子カテゴリがない場合は親カテゴリを取得
	if(empty($category_IDs)) {
		foreach($categories as $category):
			array_push( $category_IDs, $category -> cat_ID);
		endforeach;
	}
 
	if ( empty($category_IDs) ) return;
 
	return $args = array(
      'post__not_in' => array($post -> ID),
      'posts_per_page'=> intval(get_related_entry_count()),
      'category__in' => $category_IDs,
      'orderby' => 'rand',
	);
}

問題点

子カテゴリが1つも選択されていない場合は、親カテゴリを関連記事に表示するようにしています。

ただ、この方法だと、記事が1つしかない子カテゴリの場合は関連記事なしの扱いになってしまいます。

関連記事が N 以下の場合、親カテゴリからひっぱってくる、みたいなカスタマイズ方法は気が向いたら調べます。

スポンサーリンク

フォローする