2022/03/19 (Sat)
WordPress
【WordPress】カスタム投稿の人気記事一覧をプラグインなしで実装する
閲覧回数を記録する
記事の閲覧回数を計測するための「post_views_count」を新規にカスタムフィールドに追加します。functions.phpに以下のコードを追記します。
/* 記事の閲覧回数を計測
---------------------------------------------------------------------------- */
function set_post_views($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
投稿ページでアクセスがカウントされるようにsingle.phpに以下のコードを追記します。
<?php if( !is_user_logged_in() ) { set_post_views( get_the_ID() ); } ?>
!is_user_logged_in()で、ログイン中以外のアクセスがカウントされるように設定しています。
これで、投稿ページのカスタムフィールドにpost_views_countが追加されました。
記事が閲覧される度に、カウントの数値が増えていきます。
記事一覧を表示する
記事の情報を取得してWP_Queryを使い、閲覧回数の多い順で一覧表示します。
記事の一覧を表示させたい箇所に以下のコードを追記します。
サンプルでは、記事のタイトルのみ、一覧の表示件数を5件で設定しています。
<?php
$args = array(
'meta_key' => 'post_views_count', //functions.phpに記述したもの
'post_type' => 'column',//カスタム投稿名
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page' => 5 //表示件数
);
$query = new WP_Query($args); if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?>
//表示させたい記事の内容
<?php endwhile; endif; wp_reset_postdata(); ?>
ループ内の記述は割愛します。
それぞれの中身をご自由にループさせちゃってください。