WordPressで各カテゴリに紐づいているすべてのタグを一覧で出力したいけど、やり方が分からない……!
今回はこのようなお悩みをお持ちの方に向けて
WordPressで各カテゴリーに紐づく
すべてのタグ一覧を出力する方法
をご紹介します。
WordPressでは以下のような条件なら簡単に出力が可能です。
- 投稿に紐づくカテゴリー
- カテゴリーに紐づく投稿
- 投稿に紐づくタグ
- タグに紐づく投稿
しかし、
「カテゴリーに紐づくタグ」や「タグに紐づくカテゴリー」を出力する場合、ひと手間必要になります。
今回はこの内、フッターなど、特定のページに依存せずどこのページでもすべてのカテゴリーごとに紐づいているタグの一覧を出力する方法をご紹介します。
【ソースコード】各カテゴリーに紐づいているタグの一覧を出力する方法
まずは先に今回の回答であるソースコードを提示させていただきます。
以下のソースコードを「カテゴリー×タグ一覧」を表示したい箇所に記述することで、「各カテゴリーに紐づいているタグの一覧」を出力することが可能です。
<?php
/**
* ■ 処理の流れ(大枠)
* 1.全カテゴリーを取得
* 2.各カテゴリーごとに紐づいている投稿を全取得
* 3.2で取得した投稿に紐づいているタグを全取得
*/
$html = ''; // HTML出力用変数の初期宣言
/**
* 1.全カテゴリーを取得
*/
$categories = get_categories();
foreach( $categories as $category ) {
// HTML先頭(カテゴリごとにdiv要素で区切る)
$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="カテゴリアーカイブページへのリンク">カテゴリ名</a></p>
<p><a href="タグアーカイブページへのリンク">タグ名1</a></p>
<p><a href="タグアーカイブページへのリンク">タグ名2</a></p>
.
.
.
<p><a href="タグアーカイブページへのリンク">タグ名N</a></p>
</div>
<div>
<p><a href="カテゴリアーカイブページへのリンク">カテゴリ名</a></p>
<p><a href="タグアーカイブページへのリンク">タグ名1</a></p>
<p><a href="タグアーカイブページへのリンク">タグ名2</a></p>
.
.
.
<p><a href="タグアーカイブページへのリンク">タグ名N</a></p>
</div>
<!-- これ以降もカテゴリの数だけdivタグの塊が出力される -->
【解説】画像説明
基本的にはソースコードに記載してあるコメント自体が解説になっていますが、イメージしづらい部分もあるかと思いますので画像も使用して解説をしたいと思います。
まず、処理の大枠は次の通りです。
- 全カテゴリーを取得
- 各カテゴリーごとに紐づいている投稿を全取得
- ②で取得した投稿に紐づいているタグを全取得 → 一覧出力
前述したように、WordPressでは直接「カテゴリー×タグ」のような関係の情報を一発で取得することが難しいです。
しかし、「投稿」を間に介することで、「カテゴリー×タグ」の関係性を持つ情報を取得することが可能です。
今回の「データ構造」と「処理」のイメージ図
このように
- 全カテゴリーを取得し、
- 各カテゴリーに紐づく投稿を取得し、
- その投稿たちに紐づくタグを取得し、取得したタグたちを(重複を削除しつつ)出力する
といった流れを踏むことで
今回の主題である「各カテゴリーに紐づいているタグの一覧を出力する」を実現することが可能です。
<?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のお役立ち情報を発信しているため、ご興味のある方はぜひ他の記事もご覧いただけると嬉しいです。
それでは、最後までご覧いただきありがとうございました!
コメント