Я думаю, что в вашем коде отсутствует несколько полезных вещей, поэтому, если вы согласны, я бы немного изменил ваш код.
Вам может понадобиться функция для отображения представлений
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;
}
В вашей функции для подсчета просмотров вы можете установить повара ie, так что подсчитываются только просмотры, если это не тот же пользователь.
function setPostViews($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{
if(!isset($_COOKIE['wp_visited_ip_'.$postID])) { // check if cookie exist
$count++; // increase counter
}
update_post_meta($postID, $count_key, $count);
// Get IP address
$visit_ip_addr = $_SERVER['REMOTE_ADDR'];
// Set the cookie
setcookie('wp_visited_ip_'.$postID, $visit_ip_addr, time()+ (60 * 1)); // time interval
}
}
// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
В одиночном. php вашего сообщения вы можете вызвать функцию в l oop.
setPostViews(get_the_ID()); // count post views
Запрос на отображение 5 самых просматриваемых сообщений может выглядеть следующим образом:
$args_fav = array(
'post_type' => 'project',
'order' => 'DESC',
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'post_status' => array( 'publish' ),
'posts_per_page' => 5
);
$loop_fav = new WP_Query( $args_fav );
Этот код должен будет работать нормально.