いろいろな機能をひとまとめに提供しているWordPressの公式プラグイン「Jetpack by WordPress.com」。
そのひとつの機能に「サイト統計情報」というのがあるんですが、このデータを使って人気記事を取得し表示させるようにしました。
そんなわけで今回はその方法をご紹介。
「サイト統計情報」とは?
「Jetpack」が提供する機能のひとつ。
簡易的なアクセス解析をWordPressの管理画面に組み込んでくれます。
簡易とは言いつつも、
- リファラー
- トップポスト&ページ
- 検索キーワード
- 外部リンクのクリック数とリンク先
が当日、昨日、7日分、30日分、半年分、全期間とそれぞれ見られるので結構重宝するんですよね。
リファラーはどこからアクセスが来ているのか、ドメインごとに見られますし、それぞれのドメインのどのページから来ているのかも見ることができます。
検索キーワードはGoogle Analyticsと同程度のキーワードを確認することが可能です。
で、肝心なのがページビューごとにならぶ記事とページのアクセスランキング。精度も高めで、数値的にはAnalyticsとあんまり変わりません。
このデータを使って人気記事をブログに表示させたいわけです。
人気記事を表示するプラグイン
WordPressで人気記事を表示させる場合、多くはソレ系のプラグインを頼ることになります。
最も知られたところだと「WordPress Popular Posts」ですね。
WordPress界隈ではこのプラグインに関する記事も多いですし、実際当ブログでもこれまで利用してきました。
ただ、かなり表示に負荷をかけるプラグインであることも事実。
「P3 (Plugin Performance Profiler)」という負荷計測のプラグインで測ってみると、群を抜いて高めだったりします。
また、時折キャッシュデータが壊れたり、出力されるサムネイル画像にalt属性が付与できなかったりしたので、以前からこれはどうにかせにゃならんと思っていたんですよね。
そこで目をつけたのが「Jetpack」の「サイト統計情報」なわけです。
「サイト統計情報」のデータは、連携しているWordPress.comのデータベースに格納されていますから、ブログ自体の負荷には一切なりません。表示の速度改善も期待できそうですね。
Jetpackのデータを取得して表示させる
サイト統計情報からデータを取得して表示させるためには、functions.phpに以下のコードを記述します。
function popular_list( $target_days, $n ) {
$i = 0;
$args = array( 'days'=>$target_days, 'limit'=>$n+1 );
$top_posts = stats_get_csv( 'postviews', $args );
echo "<ul>\n";
foreach ( $top_posts as $value ) {
$my_id = $value['post_id']; //投稿ID取得
if ( $my_id != 0 && get_post_type($my_id) == 'post' ) { //homeは除外で投稿のみ取得
if( has_post_thumbnail($my_id) ) { //サムネイルの有無
$popular_img = get_the_post_thumbnail( $my_id, array(120,120), array('alt'=>get_the_title($my_id)) );
} else {
$popular_img = '<img src="no-thumbnail.png" width="120" height="120">';
}
echo '<li><a href="'.$value['post_permalink'].'">'.$pop_img.$value['post_title']."</a></li>\n";
$i++;
if ( $i >= $n ) { break; } //指定数を超えたら終了
}
}
echo "</ul>\n";
}
準備はこれで完了です。
3行目に'limit'=>$n+1とありますが、これは除外するページを考慮した処理。
上記のコードの場合、ブログのトップページを除外し投稿のみ取得しているので、サイト統計情報のランキングにトップページが含まれていると、10件表示させたいのに9件しか表示されないという状態になってしまいます。
そこで除外したトップページ1件分を補完するよう+1を与えています。
仮にトップページは除外しないということであれば=>$n+1は不要です。
あとは人気記事を表示させたい場所に、
<?php popular_list( 1, 10 ) ?>
を記述しましょう。期間、件数の順になるので、上記の場合は1日分の人気記事を10件表示させることになります。
例えば全期間の人気記事を10件分表示させるには、
<?php popular_list( -1, 10 ) ?>
とすればOKです。
functions.phpに記述するコードで出力するHTMLも変更できますし、デザインも好きなように組むことができます。
実装するには「Jetpack」を導入していること、さらにサイト統計情報の機能を有効にしていることが前提条件になりますが、別個に人気記事プラグインを入れておく必要がなくなるので、条件をクリアしている場合は実装を検討してみてはいかがでしょうか?
Commentsコメントしてもらえると励みになります