Steamer Lane Studio技術備忘録WordPress

WordPress 閲覧数の多い投稿を抽出し掲載

wordpress WordPress 閲覧数の多い投稿を抽出し掲載
最終更新日: 2023年4月15日

案件で表題の機能を付けようと。
調べて汎用的に使えるコードを組んでみた。
function.phpに記述

function getPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if ($count=='') {
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return "0 View";
}
return $count.' Views';
}

// 記事のPVをカウントするところ
function setPostViews($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);
}

// デバッグ するならコメントアウトを外す。Okなら消しちゃってもいいね。
// echo ”;
// echo ‘console.log(“postID: ‘ . $postID .'”);’;
// echo ‘console.log(“カウント: ‘ . $count .'”);’;
// echo ”;
// デバッグ end
}
remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);

single.phpに記述
別掲のcookieによる閲覧履歴の表示と一緒に書いても可。干渉しない。一纏めにできれば便利かもしれないが、その分コードが長くなっては意味がないし適材適所で考えればこのままでいいかなと思う。

<?php // 記事のビュー数を更新
if (!is_user_logged_in() && !is_robots()) {
setPostViews(get_the_ID());
}
?>

結果表示、表示させたいテンプレートに書いても良いが、モジュールphpにしてinc/下に置いて呼び出す形にしている(筆者はね)。
どちらにしろ他のループとかち合わない様には気を付けましょう。

<?php
$args = array(
'post_type' => 'post',
'category_name' => '',//category slugを記入
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'posts_per_page' => 3,
'order'=>'DESC',
);
$the_view_query = new WP_Query( $args );?>
<?php if ($the_view_query->have_posts()):?>
<?php while($the_view_query->have_posts()): $the_view_query->the_post();?>
<!-- サムネイルの表示 -->
<div>
<a href="<?php echo get_permalink(); ?>">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'post-thumbnail'); } ?>
</a>
</div>

<!– タイトル表示 –>
<div>
<a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a>
<p><?php echo getPostViews($post->ID); ?></p>
</div>

<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

備忘だから注釈少ない。