【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の多少の理解があればコピペでプラグインを使わず手軽にランキング一覧を実装できます。

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

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

Ads

関連記事

WordPress

固定・投稿ページの順番を手動(ドラッグ&ドロップ)で変更する方法【WordPress】

2022.05.20
50
WordPress

WordPressでデフォルトjQueryを読み込ませない方法

2022.06.22
30
WordPress

子固定ページで親固定ページ情報を親子順に全て取得する方法

2022.05.07
22
WordPress

[html css]ユーチューブをレスポンシブに埋め込む方法

更新日:2019.11.28
88