By default WordPress does not allow to show or order post by views, so we have to use a little trick which can make our blog a much more lively.
So let get started, first, we 'll create a custom post meta as whpp_track_post_views
, then on every post visit we have to increase the counter by one.
<?php
function whpp_track_post_views($post_id) {
if (!is_single())
return;
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
whpp_set_post_views($post_id);
}
add_action('wp_head', 'whpp_track_post_views');
function whpp_set_post_views($post_id) {
$count_key = 'whpp_track_post_views';
$count = get_post_meta($post_id, $count_key, TRUE);
if ($count == ") {
$count = 0;
delete_post_meta($post_id, $count_key);
add_post_meta($post_id, $count_key, '0');
} else {
$count++;
update_post_meta($post_id, $count_key, $count);
}
}
// To keep the count accurate, lets get rid of prefetching
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
USAGE
Now that we have set the custom post meta we need to add following code in WP_Query
to short post my view
<?php
$args = [
//…
'meta_key' => 'whpp_track_post_views',
'orderby' => 'meta_value_num',
'order' => 'DESC',
//…
];
$query = new WP_Query($args);
//…
//…
Keep on writing, great job!
I don’t normally comment, but I gotta tell ya, appreciate it for the post on this bonza one, mate! 😀
save my day!
thanks