Ранее мы уже рассматривали как добавить блок «Похожие записи» на WordPress сайт и создавали список популярных тегов с изображениями в стиле Mashable. В этой статье речь пойдет о том, как отслеживать и показывать самые популярные посты на сайте без использования каких-либо плагинов для WordPress.
Пример такого кастомизированного отображения самых популярных постов приведен на следующем скриншоте:
Для начала нам надо создать функцию, которая будет определять количество просмотров для каждого поста и сохранять это значение в отдельном настраиваемом поле для каждой записи. Чтобы сделать это, вставьте следующий код в файл вашей темы functions.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function wpb_set_post_views( $postID ) { $count_key = 'wpb_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 ); } } //To keep the count accurate, lets get rid of prefetching remove_action( 'wp_head' , 'adjacent_posts_rel_link_wp_head' , 10, 0); |
Теперь после вставки функции на нужное место нам надо вызвать эту функцию для отдельных страниц с публикациями. Так функция будет "знать", какой из постов выбрать и дать ему наивысшую оценку на базе числа собранных просмотров. Для этой цели следующий код надо поместить в цикл для записей в файле single.php:
1 | wpb_set_post_views(get_the_ID()); |
Если вы используете дочернюю тему или просто хотите облегчить себе задачу, то просто добавьте отслеживающий параметр в заголовок поста при помощи wp_head. Добавьте следующий код в файл функций вашей темы под названием functions.php:
1 2 3 4 5 6 7 8 9 | function wpb_track_post_views ( $post_id ) { if ( !is_single() ) return ; if ( empty ( $post_id ) ) { global $post ; $post_id = $post ->ID; } wpb_set_post_views( $post_id ); } add_action( 'wp_head' , 'wpb_track_post_views' ); |
После добавления кода каждый раз, когда пользователь открывает пост, значение настраиваемого поля будет обновляться.
Примечание: Если вы используете кэширующий плагин, этот способ по умолчанию работать НЕ будет.
Мы используем плагин W3 Total Cache, в нем есть опция под названием "фрагментированное кэширование" (Fragmented Caching). Вы тоже можете использовать этот плагин и данную опцию, чтобы все работало как следует. Вот что надо изменить:
1 | <!-- mfunc wpb_set_post_views( $post_id ); --><!-- /mfunc --> |
Теперь вы можете делать много всяких классных штук вроде отображения счетчика просмотров в посте, сортировки постов по числу просмотров и т.д. Давайте посмотрим на некоторые из этих классных возможностей.
Если вы хотите отображать счетчик просмотров для страниц постов (часто рядом с числом комментариев к записи или чем-то таким), то первое, что вам стоит сделать, — это добавить в файл темы functions.php следующий код:
1 2 3 4 5 6 7 8 9 10 | function wpb_get_post_views( $postID ){ $count_key = 'wpb_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 View" ; } return $count . ' Views' ; } |
Затем в цикл записи файла single.php добавьте следующий код:
1 | wpb_get_post_views(get_the_ID()); |
Если вы хотите отсортировать записи по количеству их просмотров, вы можете это легко сделать с помощью wp_querypost_meta параметра. Простой пример такого цикла будет выглядеть вот так:
1 2 3 4 5 6 7 8 | <?php $popularpost = new WP_Query( array ( 'posts_per_page' => 4, 'meta_key' => 'wpb_post_views_count' , 'orderby' => 'wpb_post_views_count' , 'order' => 'DESC' ) ); while ( $popularpost ->have_posts() ) : $popularpost ->the_post(); the_title(); endwhile ; ?> |
Чтобы добавить другие параметры WP_Query (такие, как промежуток времени), воспользуйтесь рекомендациями из раздела WP_Query в Codex.
Надеемся, эти советы вам помогут.
Комментарии к записи: 14
автор, а где будет появлятся это творение?????????? сайдбар футер хедер, ты же не указал
Это на ваше усмотрение, смотря куда вы вставите код. Можно в конце каждой записи, можно в начале каждой записи, можно в сайдбаре.
вот я и не нашел тот самый код
как влияет на нагрузку WP данный способ ?*
Точно так же, как и любой другой плагин) Практически никак.
Афтар написал хуйни нам тут
интересная статья!!!
Подскажите плиз, куда вставлять код чтобы популярные записи были в конце каждой статьи????
Заранее благодарен!
В single.php после
Большое спасибо, буду пробовать!!!!
Куда вставлять это кусок кода ? Где то прочитал что в wp-content.php. но этот метод не работает, просто перестает загружаться сайт ! Что делать ?
В уроке написано, в файл functions.php
Здравствуйте. Подскажите пожалуйста, а как вот тут установить вместо рамномных записей например чтобы выводилось из категории под ID6
switch($user_selected_categorie){
case ‘random’:{
$top_tabs_categorys[$key][‘category_name’]=__(‘Random Posts’,’best-magazine’);
$top_tabs_categorys[$key][‘query’]=’orderby=rand&ignore_sticky_posts=1&posts_per_page=’.$count_of_posts;
break;
}
КГ/АМ.
Аффтар, написал бы хоть как это говно вывести потом.
Спасибо автору, очень помог.