拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
一部のタグのランキングを出力する
MTQに、「一部のタグについて、そのタグが付いている記事数のランキングを出力したい」というような質問がありました。
Movable Typeの標準のテンプレートタグでもできなくはありませんが、タグが増えるにつれて再構築のパフォーマンスが悪化する問題が生じます。
そこで、拙作のSQLToolsプラグインを利用して、一部のタグのランキングを出力する方法を紹介します。
1.SQLToolsプラグインのインストール
まず、拙作のSQLToolsプラグインをインストールします。
手順は「SQLToolsプラグイン(その1・概要とインストール)」の記事をご参照ください。
2.SQLの入力
次に、集計対象のブログ(またはウェブサイト)の管理画面に入り、「SQLクエリ」→「新規」のメニューを選んで、SQLを新規作成する状態にします。
「SQLクエリの名前」の欄に「記事毎のタグ数」と入力した後、「SQLクエリ」の欄に以下のSQLを入力します。
そして、「変更を保存」ボタンをクリックして、このSQLを保存します。
SELECT tag_name, COUNT(*) AS cnt FROM mt_objecttag, mt_tag, mt_entry WHERE objecttag_tag_id = tag_id AND objecttag_blog_id =<$mt:BlogID$> AND objecttag_object_datasource = 'entry' AND objecttag_object_id = entry_id AND entry_class = 'entry' AND entry_status = 2 AND tag_name in (?) GROUP BY tag_name ORDER BY cnt DESC
3.集計結果の出力
次に、集計結果を出力するように、テンプレートを書き換えます。
対象のテンプレートを編集する状態にして、ランキングを出力する位置に、以下のようなタグを入れます。
「タグ1」「タグ2」・・・「タグn」は、集計したいタグに置き換えます。
<mt:SetVar name="tag_names" function="push" value="タグ1"$> <mt:SetVar name="tag_names" function="push" value="タグ2"$> ・・・ <mt:SetVar name="tag_names" function="push" value="タグn"$> <mt:SQLRows name="記事毎のタグ数" placeholders="$tag_names"> <mt:SQLRowsHeader><ul></mt:SQLRowsHeader> <li><$mt:SQLColumn column="tag_name"$>, <$mt:SQLColumn column="cnt"$></li> <mt:SQLRowsFooter></ul></mt:SQLRowsFooter> </mt:SQLRows> <ul>
「<mt:SQLColumn column="tag_name"$>」がタグ名を表し、「<$mt:SQLColumn column="cnt"$>」が個々のタグがついた記事の数を表します。