WordPressの標準ブロックには「タグクラウド」「ターム一覧」「カテゴリー一覧」というタクソノミー(カテゴリー・タグといった分類)のターム(タクソノミーの中の個別の分類)を一覧表示させるものがあります。
これらの動作はほとんど同じで、タクソノミーの選択、リストにするかドロップダウンにするか、親を表示させるかなどといった条件が追加できるようになっています。
そしてこれらのブロックの中で、そのタームに紐づいた投稿の数が多いものに順位性を示すことができるのは「タグクラウド」なのですが、できれば単純に、紐づく投稿の多い順にリスト化したいと思うケースも多いはずです。
しかし、これらのブロックには残念ながら並び替えの機能はなく、いろいろなサイトでよく紹介されている「widget_tag_cloud_args」フィルターを用いた変更は、「wp_tag_cloud()」関数を用いたタグクラウドウィジェットでのみ使えるものなので、残念ながらこれらのブロックには適用できません。
そこで、特定のタクソノミーのターム一覧を、紐づく投稿の数順に表示させるショートコードを作りましたので、備忘録を兼ねて紹介しておきます。
表示サンプル
このサイトのサイドバー内にある「関数やフック」の一覧で実際にこのショートコードを使用していますが、ひょっとしたら外しているかも知れませんので、以下にサンプルを示しておきます。
- add_action() (100)
- return (82)
- add_filter() (55)
- add_shortcode() (38)
- wp_enqueue_scripts (32)
- echo (31)
- function_exists() (30)
- empty() (27)
- init (24)
- isset() (23)
- wp_enqueue_style() (23)
- shortcode_atts() (22)
- global (21)
- defined() (18)
- foreach() (17)
- wp_enqueue_script() (17)
- get_option() (15)
- wp_head (14)
- get_stylesheet_directory_uri() (14)
- wp_register_style() (14)
- esc_html() (13)
- wp_add_inline_style() (13)
- current_user_can() (12)
- get_post_meta() (11)
- wp_is_mobile() (11)
- str_replace() (11)
- wp_footer (10)
- is_admin() (10)
- esc_url() (10)
- admin_head (9)
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
カスタムコード
以下のコードを有効化しているテーマのfunctions.phpへ追加します。
/*** タクソノミーのターム一覧を表示するショートコード ***/
function pwcn_custom_taxonomy_list($atts) {
// 属性の設定
$atts = shortcode_atts(array(
'taxonomy' => 'post_tag', // カスタムタクソノミー名を指定
'orderby' => 'count', // 並び替えの基準
'order' => 'Desc', // 降順
'number' => 5, // 表示するタームの数を指定
'hide' => 'true',
), $atts);
// パラメーターが空の場合の初期値
//taxonomyが空の場合は「post_tag(タグ)」を指定
if (empty($atts['taxonomy'])) {
$atts['taxonomy'] = 'post_tag'; // デフォルトのタクソノミーを指定
}
//orderbyが空の場合は「紐づく投稿の数」を指定
if (empty($atts['orderby'])) {
$atts['orderby'] = 'count'; // デフォルトのタクソノミーを指定
}
//orderが空の場合は「Desc(降順)」を指定
if (empty($atts['order'])) {
$atts['order'] = 'Desc'; // デフォルトのタクソノミーを指定
}
//numberが空の場合は「5」を指定
if (empty($atts['number'])) {
$atts['number'] = 5; // デフォルトのタクソノミーを指定
}
//hideが空の場合は「True(非表示)」を指定
if (empty($atts['hide'])) {
$atts['hide'] = 'true'; // デフォルトのタクソノミーを指定
}
// タクソノミーの取得
$terms = get_terms(array(
'taxonomy' => $atts['taxonomy'],
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'hide_empty' => $atts['hide'], // 投稿がゼロのタームを除外
'number' => $atts['number'], // 表示するタームの数を指定
));
// リストの作成
if (!empty($terms) && !is_wp_error($terms)) {
$output = '<ul class="pwcn-term-list">';
foreach ($terms as $term) {
$term_count = $term->count; // 関連付けられた投稿の数を取得
$output .= '<li>';
$output .= '<a href="' . esc_url(get_term_link($term)) . '">' . esc_html($term->name) . ' (' . intval($term_count) . ')</a>';
$output .= '</li>';
}
$output .= '</ul>';
return $output;
}
return '';
}
add_shortcode('pwcn-taxonomy-list', 'pwcn_custom_taxonomy_list');
有効化しているテーマのstyle.cssへ以下を追加します。
ul.pwcn-term-list {
display: flex;
flex-wrap: wrap;
list-style: none;
padding-left: 0;
gap: 8px;
font-size: var(--wp--preset--font-size--small);
}
コードを追加したら任意の場所へ以下のショートコードを挿入します。
[pwcn-taxonomy-list taxonomy="" orderby="" order="" number="" hide=""]
各パラメーターは以下のように設定します。
パラメーター | 説明 | デフォルト値 |
---|---|---|
taxonomy | カスタムタクソノミー名を指定します | post_tag(投稿タグ) |
orderby | 並び替える基準を指定します | count(紐づく投稿数) ※nameで名前順 |
order | 並び順を指定します | desc(降順) ※ascで昇順 |
number | 表示数を指定します | 5 |
hide | 関連数が0のものを非表示にするかどうか | true(非表示) ※falseで0のものも表示 |
スタイルについては簡潔にしていますので、任意に設定してくださいね。
簡易コード解説
骨格としては、標準ブロックではできないので「get_terms()」関数を使って指定したパラメーターの値に従ってショートコードでリスト出力をしようというものです。
パラメーターがない、パラメーターに値がない場合両方に対応できるようにデフォルト値を採用して出力するようにしていますので、エラーなどになる確率は低くなるようにしています。
ショートコードの作り方については以下のページでいろいろと紹介していますので参考にしてみてください。
コメントを残す