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');

