【WordPress】指定したカテゴリー内で利用しているタグ一覧を取得して表示する例

WordPressでサイトを作成していると、指定したカテゴリー内の投稿で利用しているタグ一覧を表示したい場合があるかもしれません。

今回は、そのような場合に利用できるソースコードの例となります。

指定したカテゴリー内で利用しているタグ一覧を取得して表示する例

例では、まず、指定したカテゴリーに属する投稿で利用しているタグのオブジェクトを取得する関数を作成します。そして、作成した関数を利用しタグ一覧を表示します。

以下が作成する関数の例となり、functions.phpに記述します。

function my_tags_in_cat( $cat_id ){
	// 現在のカテゴリーに属する投稿のIDを配列で取得
	$post_ids = get_objects_in_term( $cat_id, 'category' );

	// 取得した投稿IDの配列から、公開済み以外の投稿IDを削除
	foreach( $post_ids as $id ){
		if( get_post_status ( $id ) != 'publish' ){
			$post_ids = array_diff( $post_ids, array( $id ));
		} 
	}
	
	// 現在のカテゴリーに属する投稿で利用しているタグのオブジェクトを取得
	$tags_object = wp_get_object_terms( $post_ids, 'post_tag' );

	return $tags_object;
}

次に、上記で作成した関数my_tags_in_cat()を利用し、指定したカテゴリー内で利用されているタグ一覧をリンク付きで表示します。作成した関数my_tags_in_cat()の引数には、取得するカテゴリーIDを指定します。

以下がソースコードの例となりタグ一覧を表示したい箇所に記述します。

<?php 
// カテゴリーアーカイブの場合
if ( is_category() ) {
	// 現在のカテゴリーのIDを取得
	$cat_id = get_query_var( 'cat' );
	// 作成した関数からタグのオブジェクトを取得
	$posttags = my_tags_in_cat( $cat_id );
	// タグのオブジェクトを利用しタグ一覧を作成
	if( $posttags ){
		echo '<ul class="tag-list">';
		foreach( $posttags as $tag ){
			echo '<li><a href="'. get_tag_link( $tag->term_id ) . '">' . $tag->name . '</a></li>';
		}
		echo '</ul>';
	}
}
?>

functions.phpに作成した関数の説明

functions.php内で作成した関数my_tags_in_cat()では、引数にカテゴリーIDを指定して利用します。それにより、指定したカテゴリーに属する投稿で利用されているタグのオブジェクトを返します。

また、カテゴリーIDがない場合やタグのオブジェクトがない場合には、空の配列を返します。

以下、作成した関数内のポイントとなる箇所の説明となります。

現在のカテゴリーに属する投稿のIDを配列で取得

get_objects_in_term関数は、第1引数にタームID、第2引数にタクソノミーのスラッグを指定します。それにより、指定したタームに属するオブジェクトIDを配列で返します。

例では、そのget_objects_in_term関数を利用し、現在のカテゴリーに属する投稿のIDを配列で取得します。

例のソースコードでは以下の箇所となります。

ソースコード2行目からの箇所

// 現在のカテゴリーに属する投稿のIDを配列で取得
$post_ids = get_objects_in_term( $cat_id, 'category' );

get_objects_in_term関数は、第3引数を指定することで、戻り値のソート順の変更もできます。詳しくは、文末の参考サイト内を確認してみてください。

公開済み以外の投稿IDを配列から削除

get_objects_in_term関数では、すべての投稿の投稿IDを配列で取得します。

今回の例では、公開済みの投稿のみを表示させたいため、get_objects_in_term関数で取得した投稿IDの配列から、ループを利用し公開済み以外の投稿IDを削除します。

例のソースコードでは以下の箇所となります。

ソースコード5行目からの箇所

// 取得した投稿IDの配列から、公開済み以外の投稿IDを削除
foreach( $post_ids as $id ){
	if( get_post_status ( $id ) != 'publish' ){
		$post_ids = array_diff( $post_ids, array( $id ));
	} 
}

また、ソースコード内のget_post_status関数については、以下のリンク先を参考にしてみてください。

投稿で利用しているタグのオブジェクトを取得

wp_get_object_terms関数は、第1引数にオブジェクトID、第2引数にタクソノミーのスラッグを指定します。それにより、指定た条件にあったタームのオブジェクトを返します。

例では、その wp_get_object_terms関数を利用し、上記で取得した投稿IDの投稿で利用しているタグのオブジェクトを取得し、作成した関数の戻り値としています。

例のソースコードでは以下の箇所となります。

ソースコード12行目からの箇所

// 現在のカテゴリーに属する投稿で利用しているタグのオブジェクトを取得
$tags_object = wp_get_object_terms( $post_ids, 'post_tag' );

return $tags_object;

wp_get_object_terms関数は、第3引数を指定することで、戻り値の種類やソート順の変更もできます。詳しくは、文末の参考サイト内を確認してみてください。

まとめ

以上が作成した関数my_tags_in_cat()のポイントなる箇所の説明となります。

また、タグのオブジェクトからタグ一覧を作成する方法については、以下のリンク先を参考にしてみてください。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。