Paste the code below at Code Snippets
(Any logged-in user will not be counted)
/**
* Simple Page & Post View Counter
*
* - Counts views on individual Pages and Posts
* - Does not count logged-in administrators
* - Adds a "Views" column to Pages and Posts admin screens
* - Makes the Views column sortable
*/
/* =========================================================
* 1. COUNT PAGE / POST VIEWS
* ========================================================= */
add_action('wp', function () {
// Only count normal front-end single Pages and Posts
if (!is_singular(array('post', 'page'))) {
return;
}
// Don't count previews
if (is_preview()) {
return;
}
// Don't count administrators
if (
is_user_logged_in() &&
current_user_can('manage_options')
) {
return;
}
$post_id = get_queried_object_id();
if (!$post_id) {
return;
}
$meta_key = '_simple_page_views';
$views = (int) get_post_meta(
$post_id,
$meta_key,
true
);
update_post_meta(
$post_id,
$meta_key,
$views + 1
);
});
/* =========================================================
* 2. ADD "VIEWS" COLUMN TO PAGES
* ========================================================= */
add_filter('manage_pages_columns', function ($columns) {
$new_columns = array();
foreach ($columns as $key => $label) {
$new_columns[$key] = $label;
// Put Views immediately after Title
if ($key === 'title') {
$new_columns['simple_views'] = 'Views';
}
}
return $new_columns;
});
/* =========================================================
* 3. ADD "VIEWS" COLUMN TO POSTS
* ========================================================= */
add_filter('manage_posts_columns', function ($columns) {
$new_columns = array();
foreach ($columns as $key => $label) {
$new_columns[$key] = $label;
// Put Views immediately after Title
if ($key === 'title') {
$new_columns['simple_views'] = 'Views';
}
}
return $new_columns;
});
/* =========================================================
* 4. DISPLAY VIEW COUNT
* ========================================================= */
add_action(
'manage_pages_custom_column',
'simple_show_view_count',
10,
2
);
add_action(
'manage_posts_custom_column',
'simple_show_view_count',
10,
2
);
function simple_show_view_count($column, $post_id) {
if ($column !== 'simple_views') {
return;
}
$views = (int) get_post_meta(
$post_id,
'_simple_page_views',
true
);
echo '<strong>' .
esc_html(number_format_i18n($views)) .
'</strong>';
}
/* =========================================================
* 5. MAKE VIEWS COLUMN SORTABLE
* ========================================================= */
add_filter('manage_edit-page_sortable_columns', function ($columns) {
$columns['simple_views'] = 'simple_views';
return $columns;
});
add_filter('manage_edit-post_sortable_columns', function ($columns) {
$columns['simple_views'] = 'simple_views';
return $columns;
});
/* =========================================================
* 6. HANDLE SORTING BY VIEWS
* ========================================================= */
add_action('pre_get_posts', function ($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
if ($query->get('orderby') === 'simple_views') {
$query->set(
'meta_key',
'_simple_page_views'
);
$query->set(
'orderby',
'meta_value_num'
);
}
});