プラグインなしで人気記事の作り方
6556 Views
WordPress
WordPress
WordPressで人気記事の集計をしようとするとプラグインを使って実装することが多いと思います。
ですが、プラグインを使わずにできるのであればそれに越したことはないと考えています。
なのでプラグインを使わずに人気記事を作ってみました。
スポンサーリンク
目次
実装する内容
・ユーザが記事ページを閲覧されたらViewの数を1増やす
・同じユーザがリロードした時はViewの数は増やさない
で実装してみたいと思います。
以下のコードをfunctions.phpに追加
<?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; //保存日をセッションに格納する } } } ?>
PHPの内容としては記事のカスタムフィールド「viewCount」に数字を足していくだけのものとなります。
※WordPressの管理画面上でviewCountを編集できるようにした場合は「viewCount」のカスタムフィールドをプラグイン等で追加してください
次に記事を表示するsingle.phpに以下のコードを追加
<?php //人気記事のカウントを増やして保存 savePostViews($post->ID); //記事のpost_idを引数に入れる ?>
簡単ですね♪
人気記事TOP5を取得してみる
当ブログのサイドバーのように人気記事TOP5を表示する場合は以下のコードで実装できます。
<?php $popularityQuery = new WP_Query(array( "posts_per_page" => "5", "post_type" => "post", "meta_key" => "viewCount", "meta_value_num" => 0, "meta_compare" => ">", "orderby" => "meta_value_num", "order" => "DESC" )); if ($popularityQuery->have_posts()) { while ($popularityQuery->have_posts()) { $popularityQuery->the_post(); $title = get_the_title(); $alt = str_replace('"', '\"', $title); $href = get_the_permalink(); $img = get_field('src'); $src = (!empty($img)) ? $img : '/assets/images/noImage.jpg'; $view = get_field('viewCount'); echo " <article class=\"clearFix\"> <figure><a href=\"{$href}\"><img src=\"{$src}\" alt=\"{$alt}\"></a></figure> <div class=\"txt\"> <h1><a href=\"{$href}\">{$title}</a></h1> <i>{$view} Views</i> </div> </article> "; } } wp_reset_postdata(); ?>
コードの内容としては
・post_typeの「post」(投稿)を取得
・5件取得
・カスタムフィールド「viewCount」
になります!
※「get_field()」は「Advanced Custom Fields」プラグインに含まれている関数になります。
「Advanced Custom Fields」をインストールされていない場合は「custom_post()」や「get_post_meta()」などといった別の関数をご使用ください
以上で実装完了!
スポンサーリンク