125naroom / デザインするところ(会社)です。

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

【WordPress】プラグインなしで人気記事(ランキング)を載せる
きのこさん
人気ランキングー
きのこさん
見ちゃいますよねー

1. プラグインを使えば簡単ですが

ワードプレスでランキングを載せるならプラグインを使うほうが便利だと思います。

ただ少し重くなったりします。そう、プラグインを入れすぎると重くなるわけです。(あ、あたりまえですね。)
このサイトはほぼほぼプラグインなしで作っています。ランキングもプラグインなしです。

意外と簡単だったりしますが、カスタム投稿の場合は?とかなんだかんだと時間がかかってしまったので備忘録掲載です。何か参考になれば嬉しいです。

参考ランキング、こんな感じ

2.『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;
}

3.『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() ); } ?>

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

  • 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』の関数名を同じにすること。

さいごに

きのこさん
角のパン屋さんのチーズパンが一番ですー
きのこさん
焼きたてだったらもっと一番ですー

おすすめ

Googleさんのおすすめ

Googleさんのおすすめ

デザインの記事

Aubloom オーブルーム – RAWSILK SHAMPOO ローシルクシャンプー
ちょっと思い出しただけ
【Google Chrome】ショートカットキーまとめ(Windows or Mac)