プラグインを使わずにWordPressのタグクラウド“wp_tag_cloud()”で投稿数を表示する

投稿者:

新しくウェブサイトを作る中で、固定ページ/投稿ページの使い分けや、カテゴリーとタグ、カスタムフィールド、カスタム投稿タイプなど、どの機能を使うか考えるWordPress設計というのはとても重要ですよね。

WordPress設計がしっかりしていないと、せっかくリニューアルしたのに運営してみると不便なサイトになってしまったり、使えない機能に気付いて作り直し・・・ということもあります。

先日、カテゴリーとタグをそれぞれ使い分けたサイトのページテンプレートを作っていたところ、カテゴリーには様々なパラメータがある中、タグにはカテゴリーで使えていたパラメータがない!といったことがありました。

例えば、wp_list_categories()というテンプレートタグでは

[html]
<?php wp_list_categories(‘show_count=1’); ?>
[/html]

とすると、投稿数を表示したカテゴリーリストをリンク付きで表示してくれます。
このshow_countの機能がタグ表示関連ではなさそうです。

今回、実現したかったこと

  • サイトマップでカテゴリーやタグにそれぞれ投稿数を表示させる
  • タグ一覧ページでタグにそれぞれ投稿数を表示させる

wp_list_categories()のタグ版でwp_list_tags()のようなテンプレートタグがあれば良いのですが、ないんですよね。

どちらのページもタグ一覧を表示させるのにwp_tag_cloud()を使いました。しかしshow_countというパラメータはありません。

何か方法はないか調べてみると、タグクラウドを使ったカスタマイズ方法を見つけました!

タグ一覧を表示させたい部分に追加

[html]
<ul>
<?php score_tag_cloud(); ?>
</ul>
[/html]

functions.phpに追加

[html highlight=”25″]
// タグクラウドで件数を表示
function score_tag_cloud(){
$tags = wp_tag_cloud(
array(
‘format’ => ‘array’,
‘number’ => ‘0’,
‘order’ => ‘DESC’,
‘orderby’ => ‘count’
)
);

foreach($tags as $tag){
preg_match(‘/href=’http://.+?’/’, $tag, $matche);
$wtc_href = $matche[0];

preg_match(‘/style=’.+?’/’, $tag, $matche);
$wtc_score = round(floatval(preg_replace(‘/[^0-9.]/’, ”, $matche[0])));
$wtc_class_score = "tag-score-". $wtc_score;

preg_match(‘/title=’.+?’/’, $tag, $matche);
$wtc_title = $matche[0];
$wtc_count = mb_ereg_replace(‘[^0-9]’, ”, $wtc_title);
$tag_name = strip_tags($tag);

echo "<li><a $wtc_href $title>$tag_name</a> ($wtc_count)</li>";
}
}
[/html]

この方法でタグにそれぞれ投稿数を表示させることができるようになりました!

今回は投稿数を表示させるためのカスタマイズでしたが、参考サイトのミイラコードではタグそれぞれに色を設定したり細かいカスタマイズ方法を紹介しています。

返信を残す

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