現在のページのカテゴリーに紐づいたタグ一覧を表示したいけど方法がわからない……!
今回はこのようなお悩みをお持ちの方に向けて
WordPressで特定ページのカテゴリーに紐づく
すべてのタグ一覧を出力する方法
をご紹介します。
ページ種別に関わらずすべてのカテゴリーごとのタグ一覧を出力する方法は以下の記事で解説しています。
WordPressでは以下のような条件なら簡単に出力が可能です。
- 投稿に紐づくカテゴリー
- カテゴリーに紐づく投稿
- 投稿に紐づくタグ
- タグに紐づく投稿
しかし、
「カテゴリーに紐づくタグ」や「タグに紐づくカテゴリー」を出力する場合、ひと手間必要になります。
今回はこの内、特定のページのカテゴリーに紐づいているタグの一覧を出力する方法をご紹介します。
【ソースコード】そのページのカテゴリーに紐づいているタグの一覧を出力する
早速ですが、以下がそのソースコードです。
タグ一覧を表示したい箇所に追加する
<?php
/**
* ■ 処理の大枠
* 1.そのページのカテゴリー情報を取得
* 2.カテゴリーに紐づいている投稿を全取得
* 3.2で取得した投稿に紐づいているタグを全取得
*/
$html = ''; // HTML出力用変数の初期宣言
/**
* 1.そのページのカテゴリー情報を取得
*/
$category = get_the_category()[0];
// HTML先頭
$html = '<div>';
/**
* 2.カテゴリーに紐づいている投稿を全取得
*/
$args = [
'category' => $category->term_id,
'posts_per_page' => -1 // 取得投稿数を「全件」にする ※デフォルトだと5件なので注意
];
$category_posts = get_posts( $args );
// カテゴリーリンクをHTMLに配置
$html .= '<p><a href="'. get_category_link( $category->term_id ) . '">'. $category->name . '</a></p>';
/**
* 3.2で取得した投稿に紐づいているタグを全取得
*/
// タグ重複チェック用配列
$checked_tag = array();
foreach( $category_posts as $cat_post ){
// 各記事のタグを全出力する
$tags = get_the_tags($cat_post->ID);
/**
* 3-2.記事にタグが登録されているか判定し、登録されていれば全てのタグをリンクとして出力する
*/
if( $tags ){
foreach( $tags as $tag ){
if( in_array( $tag->name, $checked_tag) ){
// 重複しているタグはスキップ
continue;
} else {
// タグ重複チェック用
array_push( $checked_tag, $tag->name );
// タグリンクをHTMLに配置
$html .= '<p><a href="'. get_tag_link( $tag->term_id ) . '">' . $tag->name . '</a></p>';
}
}
}
}
// HTMLを出力
$html .= "</div>";
echo $html;
?>
出力の様子
上記のソースコードで出力されるHTMLの構成
<div>
<p><a href="カテゴリーアーカイブページへのリンク">カテゴリ2</a></p>
<p><a href="タグアーカイブページへのリンク">タグ1</a></p>
<p><a href="タグアーカイブページへのリンク">タグ5</a></p>
<p><a href="タグアーカイブページへのリンク">タグ2</a></p>
</div>
解説
基本的にはソースコードに記載してあるコメント自体が解説になっていますが、イメージしづらい部分もあるかと思いますのでもう少しかみ砕いてご説明します。
まず、処理の大枠は次の通りです。
- そのページのカテゴリー情報を取得
- ①で取得したカテゴリーごとに紐づいている投稿を全取得
- ②で取得した投稿に紐づいているタグを全取得 → 一覧出力
前述したように、WordPressでは直接「カテゴリー×タグ」のような関係の情報を一発で取得することが難しいです。
しかし、「投稿」を間に介することで「カテゴリー×タグ」の関係性を持つ情報を取得することが可能です。
今回は「カテゴリー」→「投稿」→「タグ」という情報連携により、そのページのカテゴリー情報に紐づいたタグ一覧を取得しています。
また、各投稿で同じタグが登録されているとタグ一覧で重複が発生してしまうため、以下の部分で一度出力したタグは2回目の出現からは出力しないよう制御しています。
ソースコードの以下の部分でタグの重複チェック
<?php
~省略~
/**
* 3.2で取得した投稿に紐づいているタグを全取得
*/
// タグ重複チェック用配列
$checked_tag = array();
foreach( $category_posts as $cat_post ){
~省略~
/**
* 3-2.記事にタグが登録されているか判定し、登録されていれば全てのタグをリンクとして出力する
*/
if( $tags ){
foreach( $tags as $tag ){
if( in_array( $tag->name, $checked_tag) ){
// 重複しているタグはスキップ
continue;
} else {
// タグ重複チェック用
array_push( $checked_tag, $tag->name );
~省略~
}
}
}
}
~省略~
}
?>
まとめ
以上がWordPressでそのページのカテゴリーに紐づいているタグの一覧を出力する方法でした。
以前公開した「各カテゴリーに紐づくすべてのタグ一覧を出力する」と同様に、調べてみると以外にも解説記事を見つけることができなかったため記事にまとめてみました。
この記事がお役に立ったなら何よりです。
当ブログではその他にもWordPressやWeb制作、PHPのお役立ち情報を発信しているため、ご興味のある方はぜひ他の記事もご覧いただけると嬉しいです。
それでは、最後までご覧いただきありがとうございました!
コメント