WordPressのランキングをプラグインなしでつくる
こんにちは、ケイジです。
WordPressのカスタマイズなどをして暮らしています。
当ブログを先日リニューアルしたのですが、人気記事ランキングを表示させるようにしました。
今回は当ブログでも実際に使っている、WordPressで表示回数が多い順に投稿を表示させる方法をご紹介します。
ランキング表示にはWordPress Popular Postsプラグインが有名です。
それをインストールしてしまえば手っ取り早いのですがWordPressプラグインは出来るかぎり少ない方が望ましいので、直接コードを書いていきます。
WordPressの人気記事ランキングをプラグインなしでつくる
基本的なことはmanablogさんの過去記事に掲載されていましたので、そちらをベースに使っていきます。
しかし、その記事ではWordPress公式から非推奨とされているquery_posts()が使われているので、WP_Query()をつかってより正しい記述で書き換えてみます。
【メモ】
ランキングなどはWordPressではサブループというものにあたり、query_posts()でのループ取得はメインループに影響を与えてしまったり、処理が重かったりするため非推奨とされています。
代わりにサブループ取得はWP_Queryの利用が推奨されています。
STEP 1 : functions.phpを編集する
これはmanablogに記載されているソースコードをそのまま利用します。注釈のみ変更しています。
// 人気記事出力用関数
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';
}
// 記事viewカウント用関数
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);
}
}
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
STEP 2 : 人気記事一覧を出力する
人気記事一覧を出力したい部分に以下のコードをコピペ。manablogと同じ条件で5件表示とします。無意味なクラス名がついているなどしたのでソースコードを整理しました。
また、せっかくfunctions.phpに人気記事が閲覧された回数を表示する関数が記述されているにも関わらず、利用されていなかったので、それを表示する処理も付け加えます。
<?php
// views post metaで記事のPV情報を取得する
setPostViews(get_the_ID());
$args = array(
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page' => 5 // ← 5件取得
);
// WP_Queryによるループ
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) :
$query->the_post();
?>
<!-- サムネイルの表示 タイトルの表示 -->
<div>
<a href="<?php the_permalink(); ?>">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'post-thumbnail'); } ?>
<p>
<?php the_title(); ?>
</p>
<?php echo getPostViews(get_the_ID()); // 記事閲覧回数表示 ?>
</div>
<?php
endwhile;
endif;
wp_reset_postdata();
?>
ちなみにmanablogさんはブログ運営ノウハウなど学ぶことが多く、色々と参考にさせていただいています。感謝。
以上になります。
よいWordPressライフを!