Привет, друзья. Вы наверняка видели на некоторых WordPress сайтах показывается количество просмотров статей и таким образом можно понять на сколько та или иная статья популярна. И однажды я показывал как сделать счетчик просмотров страниц на PHP, но там мы хранили просмотры в текстовом файле. Сейчас же мы будем подсчитывать количество просмотров записей и хранить их в базе данных и сделаем это без каких-либо плагинов. Так же выведем просмотры статей в админке. И для начала открываем в редакторе на редактирование файл темы — functions.php и вставляем в него этот кусок кода:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| add_filter("wp_head", "wpds_increament_post_view");
function get_post_views($post_id=NULL){
global $post;
if($post_id==NULL)
$post_id = $post->ID;
if(!empty($post_id)){
$views_key = 'wpds_post_views';
$views = get_post_meta($post_id, $views_key, true);
if(empty($views) || !is_numeric($views)){
delete_post_meta($post_id, $views_key);
add_post_meta($post_id, $views_key, '0');
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 0";
}
else if($views == 1)
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 1";
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> ".$views;
}
}
function wpds_increament_post_view() {
global $post;
if(is_singular()){
$views_key = 'wpds_post_views';
$views = get_post_meta($post->ID, $views_key, true);
if(empty($views) || !is_numeric($views)){
delete_post_meta($post->ID, $views_key);
add_post_meta($post->ID, $views_key, '1');
}else
update_post_meta($post->ID, $views_key, ++$views);
}
} |
add_filter("wp_head", "wpds_increament_post_view");
function get_post_views($post_id=NULL){
global $post;
if($post_id==NULL)
$post_id = $post->ID;
if(!empty($post_id)){
$views_key = 'wpds_post_views';
$views = get_post_meta($post_id, $views_key, true);
if(empty($views) || !is_numeric($views)){
delete_post_meta($post_id, $views_key);
add_post_meta($post_id, $views_key, '0');
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 0";
}
else if($views == 1)
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> 1";
return "<img src='". get_template_directory_uri()."/images/eye.svg' width='15'/> ".$views;
}
}
function wpds_increament_post_view() {
global $post;
if(is_singular()){
$views_key = 'wpds_post_views';
$views = get_post_meta($post->ID, $views_key, true);
if(empty($views) || !is_numeric($views)){
delete_post_meta($post->ID, $views_key);
add_post_meta($post->ID, $views_key, '1');
}else
update_post_meta($post->ID, $views_key, ++$views);
}
}
На 12, 15 и 16 строках необходимо указать ссылку на картинку в виде глаза. И в месте, где мы хотим вывести количество просмотров статей, как правило в самом верху между заголовком и тело статьи, вставляем функцию вывода:
<span class="meta_views">< ?php echo get_post_views(get_the_ID()); ?></span> |
<span class="meta_views">< ?php echo get_post_views(get_the_ID()); ?></span>
Класс meta_views ужен для того, чтобы была возможность выровнять изображение, которое может позиционироваться неправильно. Вот примерные стили для нормального отображения, которые использовал я:
1
2
3
4
| span.meta_views img {
position: relative;
top: 3px;
} |
span.meta_views img {
position: relative;
top: 3px;
}
В итоге должно получиться следующее:
Само собой у всех ваших записей, если они существуют уже давно, счетчик просмотров будет 0. Но вы можете самым популярным записям самостоятельно указать необходимое количество, взяв данные из аналитики. Количество просмотров хранится в базе данных WordPress в таблице wp_postmeta в колонке meta_value.
Но это занятие может утомить, если записей слишком много, поэтому могу предложить вариант автоматизации. Заключается он в том, что мы можем установить всем старым статьям определенное значение, например 500 просмотров для каждой. Но целесообразней будет заполнить ячейку таблицы разными значениями и мы тоже может это сделать выполнив такой запрос в mySQL:
Рандомно разные значения
UPDATE wp_postmeta SET meta_value= FLOOR(500 + (RAND() * 1000)); |
UPDATE wp_postmeta SET meta_value= FLOOR(500 + (RAND() * 1000));
Одинаковые значения
UPDATE wp_postmeta SET meta_value= 500; |
UPDATE wp_postmeta SET meta_value= 500;
И теперь давайте отобразим это в админке.
1
2
3
4
5
6
7
8
9
10
| add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Просмотры');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views')
echo get_post_views(get_the_ID());
} |
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Просмотры');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views')
echo get_post_views(get_the_ID());
}
И получаем:
Так мы избавимся от нулевых просмотров у статей, которые были написаны уже давно. Пусть число будет далеко от реальности, но это лучше чем ноль. Я надеюсь, что смог понятно объяснить как вывести количество просмотров записей на WordPress сайте без использования плагинов и теперь вы сможете это сделать самостоятельно.
Где нужно написать UPDATE wp_postmeta SET meta_value= FLOOR(500 + (RAND() * 1000));
В MySQL. Через интерфейс PHPMyAdmin например.
Спасибо. Вот ваш метод у меня работает на блоге.
Хочу попробовать сделать счетчик без плагинов.