I been encountering the problem of post view count. The home page show the post viewed for 16 times but when I goes into (single) post. It show me 10 only. It seem some slightly delay of update in count.
I am using CloudFlare services. But this shouldn't be the cause for the problem. Suspect to be caching problem. But I have no idea how to solve it. Anyone encounter same problem like me and have some solution?
This is the source code I found in the function.php
if ( !function_exists( 'getPostViews' ) ) {
function getPostViews( $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. __('','color-theme-framework');
}
}
if ( !function_exists( 'setPostViews' ) ) {
function setPostViews($postID) {
if (!current_user_can('administrator') ) :
$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);
}
endif;
}
}
if ( !function_exists( 'posts_column_views' ) ) {
function posts_column_views($defaults){
$defaults['post_views'] = __( 'Views' , 'color-theme-framework' );
return $defaults;
}
}
if ( !function_exists( 'posts_custom_column_views' ) ) {
function posts_custom_column_views($column_name, $id){
if( $column_name === 'post_views' ) {
echo getPostViews( get_the_ID() );
}
}
}
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
This is the code that I use to display post views in my website. Please note, admin views aren't counted, and if someone goes to the same post within 12 hours, the second view aren't counted. A second view count is only registered if that person visits the page again after 12 hours. So this is a much more accurate way of counting post views
You can now just simply add the following code where you need to display the count
and add the following code in single.php to register the count