今週のトップ10

閲覧数: 144(0)

前回の「閲覧数を記録してみる」で記事の閲覧記録を取ることには成功しましたが、このプラグインでは細かいコントロールはまだ実装されていないようで、週間ランキングなどが実現出来ませんでした、残念。でもここで諦めるのは性に合わないので、自分で実現することにしましたw まずは下調べ。

このプラグインをインストールすると、データベースのテーブルを拡張(作成)します。post_viewsというテーブルがそれです。列はid, type, period, countという至ってシンプルな作りです。idは記事IDが入ります。typeはcountのタイプで、0, 1, 2, 3, 4の分類があります。0は日、1は週、2は月、3は年、4は合計という意味です。つまりID 123のTYPE 4のCOUNTが100だったら、それは記事ID=123の合計のアクセス数が100と言うことです。週間ランキングを表示したいので、TYPE=1を選べば良いことになります。

ただし、週単位の閲覧数は、週番号(weeknumber)毎に集計されているため、記事ID=123のTYPE=1のレコードは週の数(年末には53まで増える)だけあります。通常のSELECT文でWHERE指定でTYPEだけを指定すると、TYPE=1のレコードを全て集計するので、週単位で集計したいのに結果的に合計が表示されてしまいます。前回の記事のコメントで「週はうまくいかなかったのでw」というのはこのことです。

つまり、1つの記事の閲覧数を週単位で取得するには、記事IDに対して、TYPE=1と週番号を条件にしてSELECT文を発行すれば良いことになります。プラグインのincludes/functions.phpを開きます。pvc_get_post_views()関数を丸ごとコピーしてpvc_get_post_views2()関数を作ります。まずはpvc_get_post_views()関数のオリジナルコードから。これでは、すべての週を取得してしまいます。

"SELECT SUM(count) AS views FROM " 
. $wpdb->prefix . "post_views WHERE id IN (" 
. $post_id . ") AND type = 1"

こちらが、WHEREに複数条件を指定したSELECT文です。これで、今週の閲覧数のみを取得することが出来ます。WHERE句で列を複数指定するのが今回のポイントです。pvc_get_post_views2()関数にオリジナルコードを残し、pvc_get_post_views()関数はこのように修正します。

$datew = date('oW'); 
//201546のように、年と週番号を組合せた変数を用意する
"SELECT SUM(count) AS views FROM " 
. $wpdb->prefix . "post_views WHERE (id, period) IN (SELECT " 
. $post_id . "," . $datew . ") AND type = 1"

これで正しい閲覧数は取得しましたが、もう一つ重要なことがあります。それはランキング形式で閲覧数の多い順に並べ替えることです。

こちらはオリジナルのコードです。作成者が異なるのか、コーディングが全く違います。こちらではJOIN文を使用しています。これも同様の理由で、TYPE=1だけの指定では週単位の合計となってしまい、意図した並び替えは実現出来ません。プラグインのincludes/query.phpを開きます。111行目付近に以下のコードがあるので修正します。

// is it sorted by post views?
if ( ( $sql === '' && isset( $query->pvc_orderby ) && $query->pvc_orderby )
|| apply_filters( 'pvc_extend_post_object', false, $query ) === true )
$sql = ' AND pvc.type = 1';

これが修正したコードで、同じように週番号を指定して閲覧数を取得しています。TYPE指定が不要なのは、週番号を直接指定しているためです。同一のIDでは週番号は重複しないからです。

// is it sorted by post views?
$datew = date('oW'); 
//201546のように、年と週番号を組合せた変数を用意する
if ( ( $sql === '' && isset( $query->pvc_orderby ) && $query->pvc_orderby )
|| apply_filters( 'pvc_extend_post_object', false, $query ) === true )
$sql = ' AND pvc.period = ' . $datew;

最後に、今週のトップ10と抜粋を一覧表示するページでは、閲覧数は今週の数字のみを表示し、記事本文では、合計とカッコ内に今週の閲覧数を表示するようにしました。閲覧数: 100(14)のように表示します。

$views2 = pvc_get_post_views2( $post_id ); <-- pvc_get_post_views( $post_id )をコピーして作成する

'<span class="post-views-count">' . number_format_i18n( $views2 ) . 
' (' . number_format_i18n( $views ) . ') </span>'

pvc_get_post_views()関数を週の合計、pvc_get_post_views2()関数を総合計としたので、記事の編集画面に表示されるPost Viewsが週の合計となってしまうため、columns.phpを修正します。41行目辺りです。

     // get total post views
//  $count = pvc_get_post_views( $post->ID );
    $count = pvc_get_post_views2( $post->ID );

これで編集画面のPost Viewsの数値が総合計で表示されます。

【最終更新日: 2018年2月7日】
カテゴリーIT閑話, 公開タグ, , ,
フォントを変えてみた

ネタ切れです。テーマ変更も時間が無くて手付かずです。イメージを変えるためにサイトで使用しているフォン  続きを読む

閲覧数まとめ
blank

閃きついでに総合計と週合計をフラグで制御する方式に変更してみた。これまではベタに関数をまるまるコピー  続きを読む

閃きは大事だw
blank

このサイトは、あくまでもCMSであるWordPressの構築やクラウドであるAWSの運用ノウハウ取得  続きを読む

テーマリニューアル2017
blank

すっかりご無沙汰してしまいました。 復帰記念に久しぶりにテーマを変更しました。今回使用するのは「ob  続きを読む

閲覧数を記録してみる
blank

いろいろ便利なプラグインがあるので、いくつか試してみて、最終的に採用したのが、Post Views  続きを読む

Simple Author Box
blank

「この記事を書いた人」を表示するプラグイン。これまでは「Fancier Author Box」を使用  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください