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

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

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

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

例では、指定したカテゴリー内の投稿で利用しているタグ情報を取得する関数を作成します。そして、作成した関数を利用しタグ一覧を表示します。

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

function my_tags_in_cat( $cat_slug ){
	// 戻り値を格納する配列を作成
	$output = [];
    
	if( $cat_slug ){ 
		//  WP_Queryで指定したカテゴリーを持つ投稿を取得
		$args = array(
			// すべての投稿  
			'posts_per_page' => -1,
			// 取得する投稿のタクソノミーを指定
			'tax_query' => array( 
				array(
				'taxonomy' => 'category',
				'field'    => 'slug',
				'terms'    => $cat_slug
				)
			)
		);
		$query = new WP_Query( $args );
		
		while( $query->have_posts() ){
			$query->the_post();

			// 投稿に付与されてるタグ情報を取得
			$terms = get_the_tags();
			if( $terms ){
				// タグidと名前を配列に格納
				foreach( $terms as $value ){
					$data = array( $value->term_id, $value->name );
					array_push( $output, $data );
				}
			}
		}
		// メインクエリの投稿データに戻す
		wp_reset_postdata(); 	

		// 投稿に付与されてるタグがある場合、
		if( $output ){
			// 重複したタグ情報を配列内から削除
			$output  = array_unique( $output, SORT_REGULAR );
		}
	}
	return $output;
}

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

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

<?php 
$posttags = my_tags_in_cat( 'cat01' );
if( $posttags ){
	echo '<ul class="tag-list">';
	foreach( $posttags as $tag ){
		echo '<li><a href="'. get_tag_link( $tag[0] ) .'">' . $tag[1] . '</a></li>';
	}
	echo '</ul>';
}
?>

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

functions.php内で作成した関数my_tags_in_cat()では、引数にカテゴリースラッグを指定して利用します。それにより、指定したカテゴリー内の投稿で利用されているタグ情報(タグID・タグ名)を2次元配列で返します。

戻り値の2次元配列では、外側の配列にタグ毎で格納し、内側の配列にタグ毎の情報を、タグID・タグ名の順で格納しています。

また、カテゴリースラッグがなかった場合やタグがなかった場合には、空の配列を返します。

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

指定したカテゴリーを持つすべての投稿を取得|WP_Query

関数my_tags_in_cat()内のWP_Queryでは、引数に指定したカテゴリースラッグを持つ投稿を取得します。

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

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

//  WP_Queryで指定したカテゴリーを持つ投稿を取得
$args = array(
    // すべての投稿  
	'posts_per_page' => -1,
    // 取得する投稿のタクソノミーを指定
    'tax_query' => array( 
		array(
        	'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => $cat_slug
		)
	)
);
$query = new WP_Query( $args );

WP_Queryの詳細については、以下のリンク先を参考にしてみてください。

投稿のタグ情報を取得|get_the_tags()

上記WP_Queryで取得した投稿のタグ情報を取得するため、ループで処理をします。

ループ内では、投稿ごとにget_the_tags()でタグオブジェクトを取得し、その中からタグIDとタグ名を配列として変数$dataにセットします。そして、array_push()を使い、タグ毎に変数$dataを変数$outputの配列に追加します。

それにより、変数$outputは2次元配列となり、外側の配列にタグ毎で格納され、内側の配列にタグ毎の情報を、タグID・タグ名の順で格納されます。

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

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

while( $query->have_posts() ){
	$query->the_post();

	// 投稿に付与されてるタグ情報を取得
	$terms = get_the_tags();
	if( $terms ){
		// タグidと名前を配列に格納
		foreach( $terms as $value ){
			$data = array( $value->term_id, $value->name );
			array_push( $output, $data );
		}
	}
}
// メインクエリの投稿データに戻す
wp_reset_postdata();

get_the_tags()・array_push()については、以下のリンク先を参考にしてみてください。

重複している配列内のタグ情報を削除|array_unique()

上記whileループ内で、すべてのタグ情報を変数$outputに格納すると、タグ情報が重複する可能性があるので、array_unique()を使い、重複している配列の要素を削除します。

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

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

// 投稿に付与されてるタグがある場合、
if( $output ){
	// 重複したタグ情報を配列内から削除
	$output  = array_unique( $output, SORT_REGULAR );
}

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

参考サイト、参考書籍

コメントまたはTwitterで返信

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