Written by Kasumi

【WordPress】プラグイン無しでランキングを実装する方法

WordPressサイトでプラグインを使わず、記事のPV数を集計・表示したい。

ランキング順に記事一覧を実装したい。

本記事ではこのような悩みを解決。

実装方法について解説します。

functions.phpにコードを記述

//-----------------------------------------------------
// 記事のPV数を取得する
//-----------------------------------------------------
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');
     // PVが無い場合の表示
    return "0";
  }
  // PVがある場合の表示
  return "PV数:".$count;
}
// 記事のPVをカウント
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);

上記をfunctions.phpに記述します。

get_post_meta関数で投稿記事にPV数カウント用のカスタムフィールドを生成。

getPostViews関数で記事のPV数を表示。

setPostViews関数でPV数をカウントする処理を実行してます。

single.phpにsetPostViews関数を設置

<?php 
// (ワードプレスログイン時・Webクローラーボット除外)
if (!is_user_logged_in() && !is_robots()) {
  // 記事のPV数をカウントする処理を実行
  setPostViews(get_the_ID());
}
?>

上記コードをPV数をカウントしたい投稿タイプ(デフォルトはsingle.php)に設置します。

ワードプレスログイン時・webクローラーボットのPV数を除外したい場合はif文と以下条件分岐タグを使います。

if (!is_user_logged_in() && !is_robots()) {}

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

<?php
$args = array(
  'post_type' => 'post', //投稿タイプを指定
  'posts_per_page' => '4', //表示する記事数
  'meta_key' => 'post_views_count', //PV数が入ってるカスタムフィールドをセット
  'orderby' => 'meta_value_num' //ランキング順に並び替え
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
  <?php while ($the_query->have_posts()) : $the_query->the_post();
  ?>
    <!-- 記事タイトルを表示 -->
    <p><?php the_title(); ?></p>
    <!-- PV数を表示 -->
    <p>PV数:<?php echo getPostViews(get_the_ID()); ?></p>
    <!-- 記事詳細へのリンク -->
    <a class="list" href="<?php the_permalink(); ?>">記事詳細を見る</a>
  <?php endwhile; ?>
<?php else : ?>
  <p>まだデータがありません。</p>
<?php endif; ?>

ランキング一覧を表示するサンプルコードです。

WP_Query関数を使って記事データを取得します。

パラメータに'meta_key' => 'post_views_count''orderby' => 'meta_value_num'を追加する事でランキング順に記事を並び替えできます。

while文ループ内でfunctions.phpで定義したgetPostViews関数をechoする事でPV数を表示できます。

以上の流れでランキング記事一覧の実装が完了です。

まとめ

HTML・CSSの知識とPHPの多少の理解があればコピペでプラグインを使わず手軽にランキング一覧を実装できます。

ぜひ参考にしてみてください。

以上で解説を終わります。

目次

関連記事

WordPress

【WordPress】アーカイブで記事コンテンツを取得。コンテンツから任意のHTMLタグのみ取得する方法

2022.12.06
1405
WordPress

投稿タイプ記事を画像も含めて丸ごと移行する方法【簡単便利】

更新日:2019.11.28
1332
WordPress プログラミング

wordpressのパーマリンクに拡張子(.html等)を付けれるよう変更したい

2020.07.17
1034
WordPress

Contact Form 7 Multi-Step Formsで戻るボタンが遷移しない場合の対処方法

2023.02.25
5590