こっちを優先したいのに!WordPressでカテゴリを複数設定している時の表示方法 

こっちを優先したいのに!WordPressでカテゴリを複数設定している時の表示方法 

2018年3月30日

WordPressで記事のカテゴリ名を表示するとき、どうしてますか?

カテゴリ一覧へのリンクが要らない場合、カテゴリ名の表示方法は、だいたいこんな感じで紹介されていますね。

<?php
$category = get_the_category();
$category_name = $category[0]->cat_name;
echo $category_name;
?>

しかしこの方法だと、複数のカテゴリを設定している場合、スラッグ順で若い1つだけしか表示されません。
複数のカテゴリを設定している場合はどうすればいいのでしょうか?

[Ad]

複数のカテゴリ名を全て表示するには

カテゴリ一覧へのリンクがあってもいいのなら、シンプルにこのタグでよいです。

<?php the_category(','); ?>

カテゴリ一覧へのリンクがいらない場合は、こんな感じです。

//複数カテゴリ名の表示
$category = get_the_category($ID);
for ($i=0; $i<count($category); $i++) {
	$catName = $category[$i]->cat_name;
	if($i > 0){echo ',';}
	echo $cat_name;
}

優先して表示したいカテゴリ名がある場合

カテゴリは基本的に記事を分類するものですが、サイトによってはカテゴリをシステム的に使用することもあります。

例えば、「recommend」カテゴリの記事は、トップページの決まった場所に表示させるようにしている、とか。
でもこの場合、システム的に使うカテゴリ名は知られたくないですよね。

そんな時は、優先して表示してもいいカテゴリ名を決めておき、記事で設定したカテゴリの中に、表示していいカテゴリ名があればそれを表示するようにすればよいのです。

まず、functions.phpに以下の関数を追加します。

//カテゴリ名の表示
function custom_cat_name($ID,$set=NULL){
	$showCat = array('memo','life','food'); //表示してもいいカテゴリのスラッグを指定
	$category = get_the_category($ID);
	$res = '';
	for ($i=0; $i<count($category); $i++) {
		$catName = $category[$i]->slug;
		if(array_search($catName,$showCat) !== FALSE){
			$res = $catName;
		}
	}
	if($set == 'name'){
		$obj = get_category_by_slug($res);
		return $obj->name;
	}else{
		return $res;
	}
}

そして、カテゴリを表示したい、single.phpなどで以下を記載します。

<?php echo custom_cat_name($post->ID,'name'); ?>

第2引数を設定しない場合はスラッグが返ってきます。
記事のカテゴリの中に、表示してもいいカテゴリがなければ空の値が返ります。

上記は1つだけ返ってくるようになっていますが、複数でもいい場合、9行目めを$res += $catName;にするなど、複数の場合の処理が必要になります。

カテゴリを使って表示などをあれこれしているメディアサイトなんかで使えると思います。
ブログ全体で優先して表示したいカテゴリ名が決まっている場合にもこの方法は使えるのでは。

プラグインなどもありますが、あまりプラグインは使いたくない人にはおすすめです。