目次
はじめに
WordPressサイトを制作していると、、「カスタムタクソノミー」を使用することがよくあります。これにより、投稿を分類する独自のカテゴリやタグのようなものを作成できます。
そして、時にはそのタクソノミーに関連する「ターム」(タグ)をリスト表示し、それぞれに紐づく公開記事の数を一緒に表示したいとクライアントからご要望をいただくことがあります。
今回は、特定のカスタムタクソノミーに関連するタームリンクと、各タームに紐づいた公開記事数を表示するコードを記載します。
タームリンクリスト表示の実装
サンプルコード
<?php
/**
* カスタムタクソノミーのターム一覧を表示し、ターム名の後ろに投稿数を表示
* XXXXはカスタムタクソノミーのスラッグ
*/
// 指定されたタクソノミーのすべてのタームを取得
$terms = get_terms([
'taxonomy' => 'XXXX', // カスタムタクソノミーのスラッグ
'hide_empty' => true, // 投稿がないタームは非表示
]);
if (!empty($terms) && !is_wp_error($terms)) : ?>
<ul class="tag_list">
<?php foreach ($terms as $term) :
// タームのリンクを取得
$term_link = get_term_link($term);
// リンク取得にエラーがある場合、このタームをスキップ
if (is_wp_error($term_link)) {
continue;
}
?>
<li class="tag_item">
<a class="tag_link" href="<?php echo esc_url($term_link); ?>">
<?php echo esc_html($term->name); ?> (<?php echo esc_html($term->count); ?>)
</a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
コードの詳細説明
// 'XXXX' タクソノミーのすべてのタームを取得
$terms = get_terms([
'taxonomy' => 'XXXX', // 取得するタクソノミーを指定
'hide_empty' => true, // 投稿がないタームは非表示
]);
get_terms()
:指定されたカスタムタクソノミーのタームを取得します。taxonomy
:タクソノミーのスラッグを指定。hide_empty
:投稿がないタームを非表示にします。
if (!empty($terms) && !is_wp_error($terms)) : ?>
<ul class="tag_list">
<?php foreach ($terms as $term) :
$term_link = get_term_link($term);
if (is_wp_error($term_link)) {
continue;
}
?>
<li class="tag_item">
<a class="tag_link" href="<?php echo esc_url($term_link); ?>">
<?php echo esc_html($term->name); ?> (<?php echo esc_html($term->count); ?>)
</a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
is_wp_error()
:リンクが取得できなかった場合は、そのタームの処理をスキップします。foreach ($terms as $term)
:取得したタームごとにループ処理を行い、ターム名とその投稿数を表示します。esc_html()
とesc_url()
:XSS攻撃を防ぐためにデータを安全にエスケープします。
まとめ
タームリストとそのタームに関連する公開記事数を表示することで、ユーザーにより直感的で情報豊富なコンテンツナビゲーションを提供できます。今回紹介したコードを記事一覧ページのテンプレートファイルなどに追加することで、簡単にこれを実現できます。
参考資料
get_terms – WordPress私的マニュアル (elearn.jp)
get_term_link – WordPress私的マニュアル (elearn.jp)
is_wp_error – WordPress私的マニュアル (elearn.jp)
手助けが必要なお客様へ
NaraWeb(当方)ではWebサイトの新規制作やサイトリニューアル、ちょっとした改修・カスタマイズを行っております。
ご興味をお持ちになりましたら、まずはお気軽にご相談ください。