【WordPress】カテゴリを複数設定している時の表示方法あれこれ

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

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

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

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

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

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

<?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;にするなど、複数の場合の処理が必要になります。

カテゴリを使って表示などをあれこれしているメディアサイトなんかで使えると思います。

UPDATE : / Tags

人気のタグ:DTPやってみた雑貨cms怖い話フォントwebサービスcookie育児子どもとおでかけ

関連記事

新着記事

コメントを残す