この記事は公開から7年、最終更新日からも7年経過しています。内容が古くなっている可能性があります。
WordPressにおいて記事のアクセス数をユーザーごとに集計しランキング表示する。
概要
・以前の記事で、記事のアクセス数をカテゴリごとに集計しランキング表示する方法は紹介しました。
[WordPress]記事のアクセス数をカテゴリごとに集計しランキング表示する。 #WordPress #works *2017/6/17修正あり – capture works and music
・今回は、その記事に、ユーザごとに集計したいというコメント(https://www.nakamurayuji.com/archives/2982#comments)を頂いたので、こちらで紹介したいと思います。
・特段新しい技術はありませんが、使用している関数などはユーザ関連のものに変更していますので参考になるかと思います。
・以前の記事との相違点のみを中心に記述しましたので、そちらの記事も合わせて参照下さい。
前提条件
・テーマファイルを直接編集します。※プラグイン化は勉強中です。
・アクセス数はこの作業を終えた時点から始まりますので、最初はアクセス数が全て0ということになります。
・表示は簡易的なものですので、適時、不要部分削除や、装飾等加える必要があります。
・表示する内容はユーザ名、姓名、アクセス数、アバター画像です。
・なお、期間を指定してのランキングはもうひと工夫必要になります(アクセス数をカウントするカスタムフィールドを年月日ごとに情報をハンドリングできるように変更するなど)。
手順概要
(1)functions.phpに記事ごとのアクセス数を集計するための関数を実装します。
(2)single.php(個別ページ用テンプレート※テーマによっては異なるファイルかもしれません)内に、記事にアクセスがあった際に、アクセス数をインクリメント(+1)するための記述を実装します。
(3)ユーザーランキングを表示したい箇所(例;サイドバーであれば、PHPを記述出来るウィジェット内)にユーザごとの集計を行い、かつ、ソーティング表示するためのコードを実装します(本来は関数化し、functions.phpに記述すべき箇所もあるかと思います)
手順詳細(1)
◯functions.phpに記事ごとのアクセス数を集計するための関数を実装します。
参考記事と全く同じ実装を行います。
→https://www.nakamurayuji.com/archives/2982#tejun1
手順詳細(2)
◯single.php(個別ページ用テンプレート※テーマによっては異なるファイルかもしれません)内に、記事にアクセスがあった際に、アクセス数をインクリメント(+1)するための記述を実装します。
参考記事と全く同じ実装を行います。
→https://www.nakamurayuji.com/archives/2982#tejun2
手順詳細(3)
◯ユーザーランキングを表示したい箇所(例;サイドバーであれば、PHPを記述出来るウィジェット内)にユーザごとの集計を行い、かつ、ソーティング表示するためのコードを実装します(本来は関数化し、functions.phpに記述すべき箇所もあるかと思います)
・以下、サイドバーに表示することを前提としています。
・PHPを記述できるウィジェットとしては、プラグイン「PHP Text Widget」(PHP Text Widget)等があります。このプラグインを導入した場合は通常のテキストウィジェット内にphpが記述できるようになります。こういうのもあるようです→PHP Code Widget — WordPress プラグイン
・外観→ウィジェットよりテキストウィジェット(もしくはPHPコードウィジェット)をサイドバーに追加します。
・追加したウィジェット内に以下コードを追加します。
<!-- 著者別ランキング--> <?php $count_key = 'post_views_count'; //著者一覧を取得 $users =get_users( array('orderby'=>ID,'order'=>ASC) ); //全著者ループ $count_user = array(); foreach($users as $user) { echo ($user->display_name)." "; //処理するユーザー指定 query_posts( array ( 'author' => $user->ID, 'posts_per_page' => -1 , 'orderby'=>ID , 'order'=>ASC ) ); //各著者の投稿ループし、アクセス数を計算 while ( have_posts() ) { the_post(); $post_count = get_post_meta( get_the_ID(), $count_key, true ); //投稿のアクセス数を取得 //echo "ID:" . get_the_ID() . "count:" . $post_count . "<br>"; if ($post_count <> '') { $count_user[$user->ID]=$count_user[$user->ID] + $post_count; //投稿のアクセス数をインクリメント(+1) } } //echo "<br>"; //著者の投稿ループし、アクセス数を計算(ここまで) //著者ごとのアクセス数を表示 if ( $count_user[$user->ID] <> '' ) { echo $count_user[$user->ID]."<BR>"; } else { echo "<BR>"; } //著者別ののアクセス数を表示(ここまで) } //全著者ループ終了 echo "<BR>ソートした結果を出力(小さい順に)<BR>"; //昇順ソート asort($count_user,SORT_NUMERIC); //昇順ソート結果を出力(5個出力の場合) $disp_count=5; $n=0; foreach ($count_user as $userid => $val) { $thisUser = get_userdata( $userid ); //echo get_avatar( $userid, 50, , "プロフィール画像" ); echo $thisUser->display_name."(".$thisUser->first_name." ".$thisUser->last_name."):". "<br>"; echo $val."(views)<BR>"; echo get_avatar( $userid, 50) . "<br>"; $n++; if ($n==5) {break;} } wp_reset_query(); ?>
※上記コードを記述したテンプレートファイルを作成しておきそれを、ウィジェットから呼び出す方法などもあります。
<?php get_template_part('author','ranking'); //テンプレートファイルが「author-ranking.php」というファイル名の場合 ?>
適用サイト・表示例
・私のサンプルサイト( http://sample.nakamurayuji.com/wp2#author_ranking )の右サイドバー部分(PC表示の場合)に適用し、サイドバーに実際に表示された例を添付いたします。
最後に
・少し調べる限り、この機能を実装したプラグインを見つけることが出来なかったので勉強がてら実装してみました。なのでかなり荒削りな実装となっていますがご了承下さい。
・そして、やはり!!やはり!!来るべき目標として、プラグインを作ってみたい、と思っております。
/////