WORDPRESSの投稿/固定ページで任意のタグをカウントする方法を考える

記事の中でタグのカウントをしたいことありませんか?まとめ記事をに使いたいのにググってもピンポイントでヒットしません。ならば自分で作ってしまえと1時間くらいPHPと格闘してみました。

1.やりたいこと

一言でいうと「どら焼き:名前 (271)」こんなことをしたかったのです。記事が増えれば数字が増えていくので、1ページで各タグをカウントすることができます。またタグのリンクも自動的に設定できるようしておきます。(※公開時は「どら焼き:名前(118)」と表示されています)

2.実現方法を考える

タグのカウント方法についてググると、テーマ内で表示するためのPHPの記述はすぐ見つかります。問題はそれをどうやって記事に表示させるのか・・・。PHPもWordPressも詳しくないのでこの時点で悩んでしまいましたが、WORDPRESSのショートコード機能を利用すれば、テーマ(functions.php)に追加したコードを記事に表示できそうなことがわかりました。

3.WORDPRESS子テーマのfunctions.phpにコードを書く

WORDPRESS子テーマのfunctions.phpにコードを書きます。親テーマのfunctions.phpでも機能はしますが、テーマのアップデートで消されてしまうことに注意してください。

funcions.phpに追加するコードfunction sc_tagcountlink($atts){
    extract(
     shortcode_atts( //ショートコードの引数が空欄の場合のデフォルト設定
      array(
	'tag'   => "",
	'target'=> "_self"
      ),
     $atts)
    );

    $taxonomy = 'post_tag'; //カテゴリの場合は"category"、投稿タグの場合は"post_tag"を設定
    $term = get_term_by('name', $tag, 'post_tag');
    $term_slug = $term->slug; //リンク用にタグ(カテゴリ)スラッグを呼び出す
    $term_count = $term->count; //タグ(カテゴリ)が設定されている数を呼び出す

    return '<a href="/archives/tag/' . $term_slug . '" target=' . $target . '>' . $tag . ' (' . $term_count . ')</a>';
}
add_shortcode('tagcountlink', 'sc_tagcountlink');
記事に入力するショートコード[tagcountlink tag='どら焼き']
[tagcountlink tag='1/64']
[tagcountlink tag='WordPress System Health']
[tagcountlink tag='wwwっうぇ'] のように存在しないタグはカウントされません
[tagcountlink tag='広島県']のどら焼き
[tagcountlink tag=VMware target="_blank"] とtarget="_blank"を指定することもできます
表示結果どら焼き:名前 (271)
1/64 (17)
トミカリミテッドヴィンテージ NEO (3) のように半角スペースを用いることも可能です
wwwっうぇ () のような存在しないタグはカウントされません
広島県 (10)のどら焼き
VMware (2) とtarget="_blank"を指定することもできます
注意点は3点

1つはショートコードに引数を設定しない場合のデフォルト値を[shortcode_atts]で指定すること。

次にリンク先はタグ名をURLにそのまま埋め込むのではなく、URLに適した表記に変換されたタグスラッグを利用すること。

3つめは、returnの後のa href=のパスを固定値で指定しているのでコピペする時は自分の環境に合わせること。

感想

意外と簡単に、しかも短いコードで実装できました。

スポンサーリンク