WordPress | 投稿一覧ページに記事毎のアクセス数を表示する方法

2023-02-21WordPress カスタマイズ,WordPress

WordPress | 投稿一覧ページに記事毎のアクセス数を表示する方法

WordPress管理画面での記事一覧ページに記事毎のアクセス数を表示する方法を紹介しています。

この方法は人気表示プラグイン「WordPress Popular Posts」のデータを利用していますので「WordPress Popular Posts」がインストール・有効化されている事が前提となります。

投稿一覧ページに記事毎のアクセス数を表示する

以下は紹介している方法で投稿一覧ページに記事毎のアクセス数を表示した場合の表示サンプルになります。

サンプルで表示しているデータの下段部分はは一週間分のアスセス数になります。
上段がトータルアクセス数、下段に過去7日間の日別アクセス数を表示しています。

記事毎のアクセス数を表示サンプル
記事毎のアクセス数を表示サンプル

この表示を実装するための手順になります。
いずれも「function.php」に記述します。

  1. アスセス数表示用のカラムを追加する
  2. アクセス数を取得して表示する

アスセス数表示用のカラムを追加する

manage_posts_columns()関数を使って投稿一覧ページのカラム一覧を取得し、アクセス数表示用のカラムを追加します。

任意の新しい配列のキー名$columns['view']の値となる表示時、カラムのタイトルを設定します。
WordPress固有のキー名(author、categories 、tags、comments、date)とは重複しない様に注意して下さい。

// 文字数表示用のカラムを追加
add_filter('manage_posts_columns', function($columns){
	$columns['view'] = "アクセス数";
	return $columns;
});

アクセス数を取得して表示する

manage_posts_custom_column()関数にて追加したカラムの場合に「WordPress Popular Posts」のデータからアクセス数を取得して表示します。
manage_posts_custom_column()関数は1ページに表示される記事の数だけループします。

add_action('manage_posts_custom_column', function ($column_name, $post_id) {

	//データベース情報をグローバル変数として取得
	global $wpdb;
	//タイムゾーンを設定
	date_default_timezone_set('Asia/Tokyo');

	if ($column_name == 'view') {

		//トータルアクセス数を表示
		echo '<p>' . wpp_get_views($post_id, 'all', false) . '</p>';

		//日別アクセス数を表示
		for ($i = 0; $i >= -6; $i--) {
			$wpdb->get_results("SELECT id FROM wp_popularpostssummary WHERE postid = $post_id and view_date = '" . date('Y-m-d', strtotime($i . ' day')) . "'");
			echo $wpdb->num_rows;
			if ($i != -6) {
				echo '|';
			}
		}
	}
}, 10, 2);

wpp_get_views()関数はトータル(all)の他にも過去一ヶ月(month)過去一週間(week)などのデータも取得可能です。

日別のデータはwpp_get_views()関数では取得できないのでプラグイン「WordPress Popular Posts」用のデータベースから取得しています。

マルチサイトの場合は「wp_popularpostssummary」ではなく「wp_サイトID_popularpostssummary」にて取得可能です。
サイトIDは「global $blog_id;」にて取得できます。

トータルのアクセス数だけで良ければサンプルコード中の日別アクセス数を表示以下 for の括りを削除して下さい。

また、文字数を表示する方法も紹介していますので、合わせるとちょっとしたSEOツールになるかと思います。

【WordPress】投稿一覧ページに記事毎の文字数を表示する方法 | ONE NOTE