メニュー

東京・小金井市のWEB制作会社の豆知識

MEMORANDUM

WordPress(ワードプレス)|プラグインを使わずに投稿ページの閲覧数を取得して管理画面に反映する

ページのアクセス数はgoogleアナリティクスでも確認は出来るのですが、ワードプレスの管理画面からも簡易的に人気記事を確認できたり、ページに閲覧数を表示して、より興味を示してもらえるようにと閲覧数(総合値)を取得できるようにした方法をメモ

functions.php(PHP)

// 閲覧数を取得
function get_post_views($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');
		return "0";
	}
	return $count;
}

// 閲覧数をカウント
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);
	}
}

// REST APIやボットによるリクエストを無視
function is_real_user(){
	return !(is_admin() || wp_doing_ajax() || strpos($_SERVER['HTTP_USER_AGENT'], 'bot') !== false);
}

// 閲覧数を投稿閲覧時にカウント(singleページ)
function count_post_views(){
	if(is_single() && is_real_user()){
		global $post;
		set_post_views($post->ID);
	}
}
add_action('wp_head', 'count_post_views');


// カラムの追加
function add_views_column($columns) {
	$columns['post_views'] = '閲覧数';
	return $columns;
}
add_filter('manage_posts_columns', 'add_views_column');

// カラムに表示する内容
function display_views_column($column_name, $post_id) {
	if($column_name === 'post_views'){
		echo get_post_views($post_id);
	}
}
add_action('manage_posts_custom_column', 'display_views_column', 10, 2);

// 閲覧数カラムをソート対象に追加
function post_views_sortable_column($columns) {
	$columns['post_views'] = 'post_views';
	return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'post_views_sortable_column');

// ソート実行のためのクエリ調整
function post_views_orderby($query) {
    if (!is_admin()) return;
	$orderby = $query->get('orderby');
	if ('post_views' == $orderby) {
		$query->set('meta_key', 'post_views_count');
		$query->set('orderby', 'meta_value_num');
	}
}
add_action('pre_get_posts', 'post_views_orderby');

single.php(PHP)

<p><?php echo get_post_views(get_the_ID()); ?> 回閲覧されました</p>

閲覧数を登録するメタキーに「post_views_count」を作成。
今回は投稿ページを対象とするため「single.php」にアクセスがあった際にカウント処理が動くようになっています。他のページ(カスタム投稿「○○」等)に使用する際はカウント処理「count_post_views」と各管理画面側の項目をそれぞれ変更します。

functions.php(PHP)

// 閲覧数を投稿閲覧時にカウント
function count_post_views(){
    if ( is_singular(['post','○○']) && is_real_front_user() ) {
        set_post_views( get_queried_object_id() );
    }
}
add_action('wp_head', 'count_post_views');

// カラムの追加
function add_views_column($columns) {
	$columns['post_views'] = '閲覧数';
	return $columns;
}
add_filter('manage_posts_columns', 'add_views_column');
add_filter('manage_○○_posts_columns', 'add_views_column');

// カラムに表示する内容
function display_views_column($column_name, $post_id) {
	if($column_name === 'post_views'){
		echo get_post_views($post_id);
	}
}
add_action('manage_posts_custom_column', 'display_views_column', 10, 2);
add_action('manage_○○_posts_custom_column', 'show_views_column', 10, 2);

// 閲覧数カラムをソート対象に追加
function post_views_sortable_column($columns) {
	$columns['post_views'] = 'post_views';
	return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'post_views_sortable_column');
add_filter('manage_edit-○○_sortable_columns', 'post_views_sortable_column');

// ソート実行のためのクエリ調整
function post_views_orderby($query) {
	if (!is_admin() || !$query->is_main_query()) return;

	if ($query->get('orderby') === 'post_views') {
		$query->set('meta_key', 'post_views_count');
		$query->set('orderby',  'meta_value_num');
	}
}
add_action('pre_get_posts', 'post_views_orderby');
RANKING

人気記事

同一カテゴリーの記事