Personal WP Customization Notes (PWCN)

WordPressで実際に行ったカスタマイズの記録、発生した問題への対処時のメモ、ブロックテーマのカスタマイズなど

特定のカスタムタクソノミーを紐づく投稿の数順に一覧表示させるショートコード

WordPressの標準ブロックには「タグクラウド」「ターム一覧」「カテゴリー一覧」というタクソノミー(カテゴリー・タグといった分類)のターム(タクソノミーの中の個別の分類)を一覧表示させるものがあります。

これらの動作はほとんど同じで、タクソノミーの選択、リストにするかドロップダウンにするか、親を表示させるかなどといった条件が追加できるようになっています。

そしてこれらのブロックの中で、そのタームに紐づいた投稿の数が多いものに順位性を示すことができるのは「タグクラウド」なのですが、できれば単純に、紐づく投稿の多い順にリスト化したいと思うケースも多いはずです。

しかし、これらのブロックには残念ながら並び替えの機能はなく、いろいろなサイトでよく紹介されている「widget_tag_cloud_args」フィルターを用いた変更は、「wp_tag_cloud()」関数を用いたタグクラウドウィジェットでのみ使えるものなので、残念ながらこれらのブロックには適用できません。

そこで、特定のタクソノミーのターム一覧を、紐づく投稿の数順に表示させるショートコードを作りましたので、備忘録を兼ねて紹介しておきます。

表示サンプル

このサイトのサイドバー内にある「関数やフック」の一覧で実際にこのショートコードを使用していますが、ひょっとしたら外しているかも知れませんので、以下にサンプルを示しておきます。

カスタムコード

以下のコードを有効化しているテーマの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()」関数を使って指定したパラメーターの値に従ってショートコードでリスト出力をしようというものです。

パラメーターがない、パラメーターに値がない場合両方に対応できるようにデフォルト値を採用して出力するようにしていますので、エラーなどになる確率は低くなるようにしています。

ショートコードの作り方については以下のページでいろいろと紹介していますので参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します

WordPressでショートコードを作るプログラム例
ページ内の一部のコンテンツをパスワード保護する方法(例)