WordPress offers several ways to count reads per article. You can lean on an analytics plugin, add a shortcode-based counter, or write a small function that stores the number in post meta. Each route has trade-offs, especially around privacy, data ownership, and how much control you want over the display.
Plugin options
MonsterInsights is one of the better-known Google Analytics connectors. It lets you read pageviews, visitor behavior, and bounce rate from the WordPress dashboard. The Page Insights add-on is the part that exposes per-post numbers such as views and time on page. A Google Analytics connection is required.
WP Statistics aims to be privacy-friendly and GDPR-compliant. It does not require an external account and keeps data in the WordPress database. It can track visits per post and show charts and category breakdowns. One thing gave me pause: the top review on its listing appears to mention a problem. I haven't tried it myself, so I'd watch for updates before committing.
Post Views Counter is a lightweight option focused on showing view counts for posts, pages, or custom content. It can collect data through PHP, JavaScript, or the REST API, and you can adjust where and how the counter appears.
Jetpack Stats covers post views, popular content, and traffic sources. It fits WordPress.com sites or self-hosted sites with Jetpack installed. The free plan shows the last seven days; paid plans open more.
Independent Analytics is a free analytics plugin built for WordPress. It is designed to load quickly and comply with GDPR. It records post visits automatically and reports stats by category.
If you have budget, some premium themes include view-count features. In Blocksy, for example, you can open Blocksy in the left sidebar and enable display under post meta settings.
Shortcode plugin route
One flexible plugin approach is Post Views for Jetpack. It provides a shortcode that can show various stats inside posts, pages, or widgets. If you're using Blocksy, a support-thread snippet shows how to inject that shortcode into post meta.
Add this to your functions.php and replace [sbs_views] with the shortcode defined by your shortcode plugin:
add_filter( 'blocksy:archive:render-card-layer', function ( $output, $single_component) {
if ( 'post_meta' !== $single_component['id'] ) {
return $output;
}
$post_views = do_shortcode( '<span style="background-color: initial; font-family: inherit; text-align: initial;">[sbs_views]</span>' );
$output = str_replace( '</li></ul>', '</li><li class="post-views">' . $post_views . '</li></ul>', $output );
return $output;
}, 11, 2 );
This hooks into Blocksy's archive card rendering and appends a post-views item to the existing post meta list.
Custom code without a plugin
If you'd rather not install another plugin, you can record views in post meta. Put the following in your theme's functions.php:
// Record post views
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);
}
}
// Track views on single post pages
function track_post_views($postID) {
if (!is_single()) return;
if (empty($postID)) {
global $post;
$postID = $post->ID;
}
set_post_views($postID);
}
add_action('wp_head', 'track_post_views');
// Display post views
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 Views";
}
return $count . ' Views';
}
Then call it where you want the count to appear:
echo get_post_views(get_the_ID());
If you need it in Blocksy's archive cards, use:
add_filter( 'blocksy:archive:render-card-layer', function ( $output, $single_component ) {
if ( 'post_meta' !== $single_component['id'] ) {
return $output;
}
$output = str_replace( '</li></ul>', '</li><li class="post-views">' . get_post_views(get_the_ID()) . '</li></ul>', $output );
return $output;
}, 10, 2 );
Before you edit code
Code-based tracking is not always easy to undo. The custom method above can leave many rows keyed post_views_count in the {prefix}_postmeta table. If that bothers you, use a third-party plugin or clean up the data manually. Also, some themes block changes to functions.php. If saving fails, paste with Ctrl + Shift + V, which strips formatting in many editors.