Simple Post Views Counter
Counts how many times each blog post is viewed, shows the total in a Views column in the posts list and adds a [post_views] shortcode for the front end.
Opens WPIDE on
Code
add_action( 'template_redirect', function () {
if ( ! is_singular( 'post' ) || is_preview() || current_user_can( 'edit_posts' ) ) {
return;
}
$agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? strtolower( sanitize_text_field( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) ) ) : '';
if ( '' === $agent || preg_match( '/bot|crawl|spider|slurp|preview|monitor|facebookexternalhit/', $agent ) ) {
return;
}
$post_id = get_queried_object_id();
update_post_meta( $post_id, 'wpide_post_views', (int) get_post_meta( $post_id, 'wpide_post_views', true ) + 1 );
} );
add_shortcode( 'post_views', function ( $atts ) {
$atts = shortcode_atts( array( 'id' => 0 ), $atts, 'post_views' );
$post_id = $atts['id'] ? absint( $atts['id'] ) : get_the_ID();
return '<span class="wpide-post-views">' . esc_html( number_format_i18n( (int) get_post_meta( $post_id, 'wpide_post_views', true ) ) ) . '</span>';
} );
add_filter( 'manage_post_posts_columns', function ( $columns ) {
$columns['wpide_views'] = 'Views';
return $columns;
} );
add_action( 'manage_post_posts_custom_column', function ( $column, $post_id ) {
if ( 'wpide_views' === $column ) {
echo esc_html( number_format_i18n( (int) get_post_meta( $post_id, 'wpide_post_views', true ) ) );
}
}, 10, 2 );
Notes
Visits from logged-in editors and common bots are not counted. Full-page caching stops the counter from seeing cached visits.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.