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ずつ加算されるようにしています。