WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
WEB制作
[WordPress]投稿を閲覧回数順にランキング表示
プラグイン:Advanced Custom Fields (ACF)を用いて、投稿をランキング表示する方法をご紹介します。
single.phpなどで記事の詳細ページを表示したときに回数がカウントされるようにします。
1.ACFで閲覧回数の値を保存する用のカスタムフィールドを作成
フィールドタイプは「番号」、初期値は0にします。
フィールドラベルとフィールド名は任意の文字を設定します。
フィールド名は後で使用するのでメモなどの控えておきます。
作成したカスタムフィールドはカウントしたい投稿もしくはカスタム投稿ページに表示しておきます。
2.カウントする処理を追加
WPテーマ内のfunction.phpに追加します。
function increment_post_views() {
if (is_singular('news')) { //カウントする投稿orカスタム投稿を指定
$post_id = get_the_ID();
$views_count = get_post_meta($post_id, 'post_views', true);
$views_count = $views_count ? $views_count + 1 : 1;
update_post_meta($post_id, 'post_views', $views_count);
}
}
add_action('wp', 'increment_post_views');
ifの箇所はカウントする投稿の種類に応じて変更します。
‘post_views’は先ほど作成してカスタムフィールドのフィールド名に揃えます。
この例ではカスタム投稿:newsの記事詳細ページを表示する度に閲覧回数が加算されていきます。
正常にカウントされていれば管理画面上のカスタムフィールドの値が更新されます。
3.WP_Queryで記事一覧を表示
<?php
$args = array(
'post_type' => 'news',
'posts_per_page' => 10,
'meta_key' => 'post_views',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()) {
$rank = 1;
while ($query->have_posts()) {
$query->the_post();
?>
<article>
<a href="<?php the_permalink($post); ?>">
<div class="view view_<?php echo $rank; ?>">
<span><?php echo $rank; ?></span>
</div>
<h2><?php echo get_the_title(); ?></h2>
</a>
</article>
<?php
$rank++;
wp_reset_postdata();
} ?>
$argsの中身を用途に合わせて変更します。
例ではnewsを閲覧回数が多い順に10件まで表示するようにしています。
‘meta_key’はの値は先ほど作成してカスタムフィールドのフィールド名に揃えます。
ランキング順に1〜の番号を表示するために処理がループする度に$rankに1ずつ加算されるようにしています。