4

Is there anyway to show in a template for a post, how many times that post has been viewed, like hits without some sort of plugin? It seems wordpress would have this built in, but I am unable to find any template tags for such a think in the documentation?

2 Answers 2

4

Not in core. You can use post meta to store this information on page loads. If you have caching plugins enabled, you might want to increment the hit counter with an AJAX call, otherwise you can just add this directly in your single.php and page.php templates:

//Add to functions.php
function get_hits(){
    global $post;
    $hits = get_post_meta($post->ID, '_hit-counter', true);
    return $hits;
}

function update_hits($count){
    global $post;
    $count = $count ? $count : 0;
    $hits = update_post_meta($post->ID, '_hit-counter', $count++);
    return $hits;
}

//Usage within the loop
update_hits(get_hits());
2
  • Brian - I'm struggling to get this to work. Presumably I add the two functions to functions.php and use the updates_hits(get_hits()) in the page template inside the loop. What do I use to echo out the value to screen? get_hits()?
    – TomC
    Commented Dec 12, 2014 at 17:03
  • 1
    @TomC This solution was something I created before understanding race conditions. I wouldn't actually use this now. I would create a hits table then log each hit with a relational column for post_id. Commented Dec 12, 2014 at 19:44
3

No, WP doesn't have such functionality built-in. Probably because updating the post table on each page hit would slow down the site.

You'll have to use wp-postviews or something related.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.