なんにもない日の頭の中はこんなもんだったりする

【WordPress】プラグインなしで人気記事(ランキング)を載せる

【WordPress】プラグインなしで人気記事(ランキング)を載せる

ワードプレスでランキングを載せるならプラグインを使うほうが便利だと思います。
ただ少し重くなったりする。
プラグインを入れすぎると重くなる。
ま、あたりまえですね。
このサイトはほぼほぼプラグインなしで作っています。
ランキングもプラグインなしです。

意外と簡単だったりしますが、カスタム投稿の場合は?
と少し時間がかかってしまったので備忘録。

functions.phpに追記する

【今回のテーマ】
・ユーザーからのアクセスのみをカウントする。
・クローラーからのアクセスをカウントしない。
・ログイン中のアクセスをカウントしない。

記事のアクセス数を計測するために追記。

カスタムフィールドに「post_views_count」を追加する。
アクセスがあったら値が+1。

//記事のアクセス数を計測するために追記
function set_post_views($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);
  }
}

クローラーのアクセスを判別するために追記。

なんでもカウントOKってことなら以下は不要。
クローラー、いっぱいあるので必要なものだけでOK。

//クローラーのアクセスを判別するために追記
function is_bot() {
  $ua = $_SERVER['HTTP_USER_AGENT'];
 
  $bot = array(
    'Googlebot',
    'Yahoo! Slurp',
    'Mediapartners-Google',
    'msnbot',
    'bingbot',
    'MJ12bot',
    'Ezooms',
    'pirst; MSIE 8.0;',
    'Google Web Preview',
    'ia_archiver',
    'Sogou web spider',
    'Googlebot-Mobile',
    'AhrefsBot',
    'YandexBot',
    'Purebot',
    'Baiduspider',
    'UnwindFetchor',
    'TweetmemeBot',
    'MetaURI',
    'PaperLiBot',
    'Showyoubot',
    'JS-Kit',
    'PostRank',
    'Crowsnest',
    'PycURL',
    'bitlybot',
    'Hatena',
    'facebookexternalhit',
    'NINJA bot',
    'YahooCacheSystem',
    'NHN Corp.',
    'Steeler',
    'DoCoMo',
  );
  foreach( $bot as $bot ) {
    if (stripos( $ua, $bot ) !== false){
      return true;
    }
  }
  return false;
}

single.phpに追記する

追記する場所はsingle.php内ならどこでもOK。
「!is_user_logged_in()」→ログイン中以外
「!is_bot()」→クローラー以外

<?php if( !is_user_logged_in() && !is_bot() ) { set_post_views( get_the_ID() ); } ?>

人気記事(ランキング)を表示する

・5件表示する。
・カスタム投稿の場合

<ol>
<?php
$popular = new WP_Query(array(
	'posts_per_page'   => 5,
	'meta_key'         => 'post_views_count',//投稿数をカウントするカスタムフィールド名
	'orderby'          => 'meta_value_num',
	'order'            => 'DESC',
	'post_type'        => array('カスタム投稿名','カスタム投稿名','カスタム投稿名'),
	'post_status'      => 'publish',
	'caller_get_posts' => 1,
	'offset'           => 0,
));
while ($popular->have_posts()) : $popular->the_post();
?>
	<li>
		<div class="popular_thumbnail">
			<a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
				<?php if ( has_post_thumbnail() ):  ?>
				<?php echo get_the_post_thumbnail(); ?>
				<?php else:  ?>
				No image
				<?php endif; ?>
			</a>
		</div>
		<div class="popular_entrytitle">
			<a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
		</div>
	</li>
<?php endwhile; wp_reset_postdata(); ?>
</ol>

注意点

・functins.phpとsingle.phpの関数名を同じにすること。

いつかのこと

おすすめ

いつかのこと