【WordPress Popular Posts】ランキング一覧のHTMLをフィルターフックでカスタマイズ
PV集計を行いランキングを表示してくれるプラグイン
「WordPress Popular Posts」
とても簡単にランキングを構築することができて便利ですよね。
ja.wordpress.org
一覧を表示(出力)する場合、ウィジェットやショートコード、関数などで
post_htmlにHTMLをセットしてランキングを表示するのが一般的かと思います。
パラメータ(表示させる記事の項目)は名前やリンク、
閲覧数やコメント数などいくつかの基本的な項目として用意されています。
下記、「post_htmlのパラメーター」項目を参照
表示できる項目は限られているので、
「カスタムフィールドを使いたい!」
「記事IDを取得してどうこうした!」
というようなケースでは上記のpost_htmlパラメータでは実現できないんです。
ココナラやWow!meでも結構たくさんの方からご相談をいただきます。
そんな時でも対応できるのが「フィルターフック」です。
プラグインが予めフィルター適用を可能にしてくれています。
それでは実際の使い方をご説明します。
wpp_postフィルター
「wpp_post」フィルターで表示制御を行います。
スクリプトの記述はfunctions.phpが良いと思います。
<?php add_filter( 'wpp_post', 'custom_wpp_post'); function custom_wpp_post($post_html, $post, $instance ){ //ここにHTMLを記述しreturnする }
引数 $post に記事情報とランキング情報
$post_html ... post_htmlパラメータにセットした文字列がそのまま入ります
$post ... 記事情報とランキング情報が入る
$instance ... オプション(無視してOK)
$postからID,Titleなどの基本情報を取得でき、
$post->pageviews, $post->comment_countとするとランキング情報を取得できます。
実際の使い方
<?php add_filter( 'wpp_post', 'custom_wpp_post'); function custom_wpp_post($post_html, $post, $instance ){ $format_html = <<<EOM <li> <a href="%s" class="title" title="%s">%s</a> <div class="date">%s</div> </li> EOM; $output = sprintf($format_html, get_the_permalink($post->id), esc_attr($post->title), $post->title, date( 'Y-m-d', strtotime($post->date)) ); return $output; }
PHPヒアドキュメントを使いわかりやすくHTMLを記述しています。
wpp_postというのは1行ごとに呼ばれます。
wpp_custom_htmlフィルターを使うと、
引数 $mostpopularに全ランキング情報が入ってきます。
ループで$mostpopularを回すことができるので、
1位、2位。。。という順位をPHPで表示させることも可能です。
(記事IDは$mostpopular[i]->id で取得できるっぽい)
記事IDを取得できれば、カテゴリやタグ、カスタムフィールドなどもテンプレートで書くような感覚で取得・カスタマイズできますね。