色んなブログを見ていると、よく人気記事の一覧がサイドバーなどに表示されていることがあります。WordPress Popular Postsなどのプラグインを使えば簡単に実装することができますが、今回はプラグインなしで人気記事を表示させる方法をご紹介したいと思います。
プラグインなしでWordPressサイトの人気記事一覧を表示する方法
まずは、functions.phpに以下のコードを追加します。コピペで大丈夫です。
function savePostViews($postID) { $_date = date('Ymd'); $metaKey = 'viewCount'; $count = get_post_meta($postID, $metaKey, true); if (empty($count)) { $count = 1; delete_post_meta($postID, $metaKey); add_post_meta($postID, $metaKey, '1'); $_SESSION["{$_date}_{$postID}"] = true; } else { if (!isset($_SESSION["{$_date}_{$postID}"])) { $count++; update_post_meta($postID, $metaKey, $count); $_SESSION["{$_date}_{$postID}"] = true; } } }
「viewCount」というカスタムフィールドを追加して、ここに閲覧数を格納してカウントしていきます。
続いて、single.phpに以下のコードを追加します。
<?php savePostViews($post->ID); ?>
投稿IDをfunctions.phpで定義したsavePostViews関数に渡すことで、記事毎の閲覧数がviewCountに格納されます。
最後に、人気記事一覧を表示したい箇所に、以下のようなループを記述します。
<ul> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'paged' => $paged, 'posts_per_page' => 5, 'post_type' => array('post'), "meta_key" => "viewCount", "meta_value_num" => 0, "meta_compare" => ">", "orderby" => "meta_value_num", "order" => "DESC" ); $wp_query_post = new WP_Query($args); if ($wp_query_post->have_posts()): while($wp_query_post->have_posts()): $wp_query_post->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php echo get_the_title() ); ?></a> </li> <?php endwhile; endif; wp_reset_postdata(); ?> </ul>
上記では、人気記事トップ5が出力されます。
ループの条件で、meta_keyにviewCountを指定し、降順に並べることで閲覧数の多い順に表示しています。
タイトルやリンクの出力部分は、お好みで変更してください。
あとがき
プラグインを使わなくても意外と簡単に人気記事一覧を実装できちゃいますね。
プラグインを使わずに人気記事を実装してみたいという方は、ぜひ参考にしていただければ幸いです。