WEBサイト制作

ショッピングサイト制作

システム開発

コンテンツ制作

TORATについて

制作の流れ

プライバシーポリシー

お問い合わせは
こちらから

TOP

WordPress プラグインなしで記事のランキングを表示させる方法

2020年07月13日

投稿者: アンディ

WordPressにおいてプラグインなしで、記事の読まれた回数をカウントし、ランキングとして表示させる方法をご紹介します。

プラグインを導入するとより手軽にランキングを表示できますが、なにかと不便だったり、サイト自体が重くなったり動かなくなることもあるので、なるべくプラグインは使用しないのが賢明かと思います。

当サイトもほぼプラグインなしで構築しています。コピペで実装できますので、参考になれば幸いです。

「functions.php」に追加

記事の閲覧回数をカウントする関数をfunctions.phpに追加します。

※functions.phpを変更する場合はバックアップを取ることを推奨します。

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

記事ランキングを表示する

  • 5件表示
  • 記事のタイトル
  • 投稿された日時
  • アイキャッチ画像
  • 登録カテゴリ
<ol>
<?php
$popular = new WP_Query(array(
    'posts_per_page'   => 5,
    'meta_key'         => 'post_views_count',//投稿数をカウントするカスタムフィールド名
    'orderby'          => 'meta_value_num',
    'order'            => 'DESC',
    'post_status'      => 'publish',
    'caller_get_posts' => 1,
    'offset'           => 0,
));
while ($popular->have_posts()) : $popular->the_post();
?>
    <li>
            <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>">
          <?php the_title(); ?>
          <?php the_time('Y.m.d'); ?>
          <!-- アイキャッチ画像が登録されているか -->
          <?php if(has_post_thumbnail()): ?>
          <?php the_post_thumbnail('index_thumbnail'); ?>
          
          <!-- ないときは記事の最初の写真、それもないときはfunctionsに設定したパスの画像 -->
          <?php else: ?>
          <img src="<?php echo catch_that_image(); ?>" alt="<?php the_title(); ?>">
          <?php endif; ?>

        <?php if( has_category() ){ ?>
        <span class="cat-data">
        <?php $postcat=get_the_category(); echo $postcat[0]->name; ?>
        </span>
        <?php } ?>


            </a>

    </li>
<?php endwhile; wp_reset_postdata(); ?>
</ol>

$popular = new WP_Query(array());内に下記を追加すると特定のカテゴリに追加された投稿は除外されます。

	'category__not_in' => array(5),//特定のカテゴリを外す

「single.php」にカウンターを追加

記事にアクセスがあったときにpost_viewa_countの値を+1する記述をsingle.phpに追加します。

<?php set_post_views( get_the_ID() ); ?>

しかし上記コードでは記事を確認するためにプレビュー表示した場合やクローラーが巡回した場合も回数がカウントされてしまいます。

なんでもカウントしてOKならば、上記で大丈夫です。

「functions.php」に追加

クローラーかどうかを識別するための関数をfunctions.phpに追加します。

//クローラーのアクセス判別
function is_bot() {
  $ua = $_SERVER['HTTP_USER_AGENT'];
 
  $bot = array(
        "googlebot",
        "msnbot",
        "yahoo"
  );
  foreach( $bot as $bot ) {
    if (stripos( $ua, $bot ) !== false){
      return true;
    }
  }
  return false;
}

「single.php」に追加

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

CSSで装飾

出力しているところに好きなスタイルを適応させると完成です。

この記事の投稿者

フロントエンドエンジニア

アンディ

WordPressの「メディアの追加」トラブル時の対処

2015年9月6日 TORAT

WordPressでトップページ・固定ページに最新記事リスト表示 

2013年4月3日 TORAT

2020年1月7日 アンディ

2020年2月19日 アンディ

ブログ一覧へ

書いた人

WRITERS