WordPress(ワードプレス)でWP-PostViewsの順位表示を画像にしてみたい

ワードプレスで人気記事を表示するプラグインとしてWP-PostViewsがあります。記事に対してView数に応じた順位付けを行い出力してくれるプラグインです。今回は、設置までは完了しているという前提で、順位の数字を画像化したりなどを実現するカスタマイズ方法をご紹介です。プラグイン本体を少し変更します。

WP-PostViewsで出力されるHTMLは、設定画面に入力されたフォーマット(デフォルトあり)に従いますが、それにもともと使用できる変数は次の五つです。これだけでは順位ごとにユニークな値を保持することができないため、これらに加えて独自の変数を設定しました。

%VIEW_COUNT% 累積VIEW数
%POST_TITLE% 記事のタイトル
%POST_EXCERPT% 記事の概要
%POST_CONTENT% 記事の内容
%POST_URL% 記事のURL

1.独自の変数設定とフォーマットへの記述

今回%RANKING_NO%という変数を独自に設け、順位ごとのクラスを設定しました。例えば出力フォーマットで以下のようにして使うことを想定してます。各順位のliにclassとしてnoXという値を設定しています。

<li class="no%RANKING_NO%">
<a href="%POST_URL%"  title="%POST_TITLE%">%POST_TITLE%</a>
 - %VIEW_COUNT% views</li>

%RANKING_NO%という変数は元々存在しませんので、処理して出力させる為にはプラグインのプログラム自体の改修が必要です。以下に続きます。

2.設定した変数の処理の追加

プラグインフォルダのwp-postview.phpを開いて、以下の記述がある箇所を探します。

foreach ($most_viewed as $post) {
	$post_views = intval($post->views);
	$post_title = get_the_title();
	if($chars > 0) {
		$post_title = snippet_text($post_title, $chars);
	}
	$post_excerpt = views_post_excerpt($post->post_excerpt, $post->post_content, $post->post_password, $chars);
	$post_content = get_the_content();
	$temp = stripslashes($views_options['most_viewed_template']);
	$temp = str_replace("%VIEW_COUNT%", number_format_i18n($post_views), $temp);
	$temp = str_replace("%POST_TITLE%", $post_title, $temp);
	$temp = str_replace("%POST_EXCERPT%", $post_excerpt, $temp);
	$temp = str_replace("%POST_CONTENT%", $post_content, $temp);
	$temp = str_replace("%POST_URL%", get_permalink(), $temp);
	$output .= $temp;
}

上記がフォーマットに記述された変数に実際に値を代入している箇所となります。これに、今回用意した変数と、その変数に順位を代入する処理を追加します。追加したソースが以下となります。※この処理はパターンによって複数箇所に記述されていますのでご注意ください。

$rankingNo = 1;//順位を計数する変数の定義
foreach ($most_viewed as $post) {
	$post_views = intval($post->views);
	$post_title = get_the_title();
	if($chars > 0) {
		$post_title = snippet_text($post_title, $chars);
	}
	$post_excerpt = views_post_excerpt($post->post_excerpt, $post->post_content, $post->post_password, $chars);
	$post_content = get_the_content();
	$temp = stripslashes($views_options['most_viewed_template']);
	$temp = str_replace("%VIEW_COUNT%", number_format_i18n($post_views), $temp);
	$temp = str_replace("%POST_TITLE%", $post_title, $temp);
	$temp = str_replace("%POST_EXCERPT%", $post_excerpt, $temp);
	$temp = str_replace("%POST_CONTENT%", $post_content, $temp);
	$temp = str_replace("%POST_URL%", get_permalink(), $temp);
	$temp = str_replace("%RANKING_NO%", $rankingNo, $temp);//変数への代入
	$output .= $temp;
	$rankingNo++;//順位のカウントアップ
}

1,16,18行が追加箇所です。上から順に、順位を計数する為の変数定義、%RANKING_NO%に順位を代入する処理、ランキングの変数をカウントアップする処理です。

上記処理は順位の表示数分だけ繰り返して各記事を表示するという流れになっていますが、それぞれの回数を順位として変数に代入し、表示させています。これらを、該当箇所全てに追加してアップロードします。

管理画面での設定とwp-postview.phpの改修が完了したら、ソースを確認します。以下のようになっていれば成功です。

<ul>
<li class="no1"><a href="#" title="記事1">記事1</a> - 10 views</li>
<li class="no2"><a href="#" title="記事2">記事2</a> - 10 views</li>
<li class="no3"><a href="#" title="記事3">記事3</a> - 10 views</li>
<li class="no4"><a href="#" title="記事4">記事4</a> - 10 views</li>
<li class="no5"><a href="#" title="記事5">記事5</a> - 10 views</li>
</ul>

あとは、classごとにCSSを適用することで任意のデザイン要素を付加することが可能です。順位ごとに色分けしたり、順位を数字表記ではなく画像で表示したり、文字の大きさを順位に対応した物にしたり、一位だけ表示を詳しくしたり、なんてこともできそうですね。

プラグインの内部的には、wordpressの標準の変数を使用して値を持ってきているようなので、wordpressが標準的に扱っている値であれば、定義されている変数以外にも様々な値を取得し、利用することができそうです。かなり応用が利く方法かと思います。それらを取得できるほかのプラグインを最初っから使うってのも手ですけど・・・まあ、それはカスタマイズしてから気づいたので見なかったことに、無かったことにします。