2020-10-07/2023-05-23

簡易的に閲覧数を記録する

簡易的に閲覧数を記録する

簡易的に閲覧数を記録し、「よく見られている記事」のように表示する方法を考えてみます。

データベースに項目を増やすなどといった作業はありません。

post_metaを使用する方法です。

手順としては以下になります。

「閲覧数を数える機能設置」

「数えたいページのテンプレートに設置」

「よく見られている記事取得」

の順で紹介します。

閲覧数を数える機能設置

post_metaを使用し、閲覧数をカウントします。

すでに対象ページの閲覧数用のキーがあった場合にはカウント、

なかった場合には閲覧数用のキーを作成します。

define( 'MY_COUNT_KEY', 'my_count_key' );
function my_post_views( $post_ID ) {
$num = get_post_meta( $post_ID, MY_COUNT_KEY, true );
if ( $num == '' ) {
delete_post_meta( $post_ID, MY_COUNT_KEY );
add_post_meta( $post_ID, MY_COUNT_KEY, 0 );
} else {
$num++;
update_post_meta( $post_ID, MY_COUNT_KEY, $num );
}
}

delete_post_meta でキーの削除を行っておきます。

別になくても問題はありませんが、「”」が値として入っていた時用です。

数えたいページのテンプレートに設置

投稿であれば「single.php」、固定ページであれば「page.php」

次の「よく見られている記事取得」で表示したい項目のテンプレートが対象です。

それらのテンプレートの下の方に埋め込みます。

my_post_views( $post->ID );

これでそれぞれのページが開かれるとカウントが行われます。

あまりにもテンプレートが多い場合は処理をアクションフックさせましょう。

よく見られている記事取得

よく見られている記事はサイドバーや記事のフッターなどで表示されると思います。

そのため、ウィジェットでの実装が都合よいと思います。

ウィジェットの作り方を参考にしてください。)

$args = [
'post_type' => [ 'post', 'page' ],
'posts_per_page' => 3,
'post__not_in' => [ $post->ID ],
'meta_key' => MY_COUNT_KEY,
'orderby' => 'meta_value_num',
'order' => 'DESC'
];
$query = new WP_Query( $args );

「post_type」は「数えたいページのテンプレートに設置」で設置した投稿タイプを指定してください。

「any」などで一括指定しても問題ありません。

また、上の例では閲覧上位記事に表示している記事があった場合にその記事を除いています。(post__not_in)

メタキーの値をが数値の場合は「orderby」に「meta_value_num」とします。

上記で得られた投稿データをループで取得すれば、お好みの形で表示を行うことができます。

さいごに

アクセス数の多いサイトではサーバーの負担が大きい可能性があります。

「閲覧数を数える機能」のところでキャッシュを使用するなどして対策をすると負担を減らせます。

また、Botなども含まれる可能性があります。

Botを数えたくない場合にはBot除外用の処理を挟みましょう。

2020 KumaTechLab.