WordPressタグクラウドのタグが並び替え出来ない

WordPressタグクラウドのタグが並び替え出来ない

タグクラウドで表示したタグの並び変え方法を紹介します!

サイドメニューのところにタグウィジェットでタグ一覧を表示させているのですが、そこをカウント順(使用頻度順)に並び替えてみたいと思います!

タグの並び順が変更出来ない!

いざググって調べてみると以下のコードが頻繁に引っ掛かりました!

function custom_wp_tag_cloud($args) {
	$myargs = array(
		'orderby' => 'count',
		'order' => 'DESC'
	);
	$args = wp_parse_args($args, $myargs);
	return $args;
}
add_filter( 'widget_tag_cloud_args', 'custom_wp_tag_cloud' );

ふむふむ、とりあえずコピペっと。。あれタグの表示順が変わらないぞ?

調べてみると、上記はファイル「class-wp-widget-tag-cloud.php」内の関数「widget」から生成されているタグウィジェットには有効なようで、今回並び替えしたいのはファイル「tag-cloud.php」内の関数「render_block_core_tag_cloud」から生成されているタグクラウドの表示です。引き続き調査してみます。

「widget」も「render_block_core_tag_cloud」もタグを取得する際には関数「wp_tag_cloud」を読んでいるようです。
それぞれの「wp_tag_cloud」を呼び出しているところを見てみましょう。

「widget」内から「wp_tag_cloud」を呼び出しているところの抜粋です。なるほど、これでフィルターフック「widget_tag_cloud_args」を新規作成しているので、上記のようにフックをかけて並び替えの記述を変更・追加してあげれば並び替えが可能だったわけですね。

$tag_cloud = wp_tag_cloud(
	apply_filters(
		'widget_tag_cloud_args',
		array(
			'taxonomy'   => $current_taxonomy,
			'echo'       => false,
			'show_count' => $show_count,
		),
		$instance
	)
);

それでは「render_block_core_tag_cloud」内から「wp_tag_cloud」を呼び出しているところを見てみましょう。あれれ?フィルターフックが作成されていないぞ。
なんてこった。ここでフィルターフックがされていれば即解決できたのですが。もう少しコードを見ていきましょう。

$args = array(
	'echo'       => false,
	'taxonomy'   => $attributes['taxonomy'],
	'show_count' => $attributes['showTagCounts'],
);
$tag_cloud = wp_tag_cloud( $args );

タグ表示の並び順を変更する方法!

実際にタグクラウドを並び替えする方法を見つけたのでご紹介します。

「tag_cloud_sort」フックを使って並び替えをする

コードを読み解いていくと「tag_cloud_sort」なる名前のフックを見つけました!名前的にもなんだか並び替えできそうな感じ!実際に並び替えてみます!

function filter_tag_cloud_sort($tags) {
	
 	//uasort( $tags, '_wp_object_name_sort_cb' ); // 名前順
	uasort( $tags, '_wp_object_count_sort_cb' ); // カウント順
	
	$tags = array_reverse( $tags, true ); // DESC順に変更。ASCの場合はコメントアウトする

	return $tags;
}
add_filter( 'tag_cloud_sort', 'filter_tag_cloud_sort', 10, 1 );

上記をfunctions.phpに追記することで実際に並び替えしてみました。

ここで注意が必要なのは、「tag_cloud_sort」フックに受け渡される「$tags」の中身ですが、デフォルト設定がカウントの降順、つまりカウントの多い順に45個となっており、この条件で取得したものが入ってきます。

今回の目的としてはカウント数の降順で取得したかったのでこれで大丈夫ですが、もし取得数の変更や取得条件の変更をしたい場合は「wp-includes」配下にあるファイルを直接書き換える必要がありそうです。
とはいえ、WordPressのバージョン変更等で書き換えられる可能性があるのであまりやりたくありません。もし必要になったら細かく調査する必要がありそうです。

ひとまず、目的は達成したのでこの辺で調査は切り上げます!

環境

WorePress バージョン5.8

テーマ LION BLOGバージョン: 2.0.0