Как добавить просмотры и оценки к постам WordPress

Учет просмотров и оценок постов — важный элемент для повышения вовлеченности пользователей и анализа популярности контента на сайте WordPress. В этой статье мы подробно рассмотрим, как реализовать счетчик просмотров и систему оценок постов без использования громоздких плагинов, а также с помощью полезных инструментов, которые помогут быстро и эффективно внедрить нужный функционал.

Как добавить счетчик просмотров постов в WordPress без плагинов

Для начала создадим простой и легковесный счетчик просмотров с использованием пользовательских полей (мета-полей). Такой способ подойдет, если вы хотите избежать лишних плагинов и контролировать код самостоятельно.

Шаг 1. Создаем функцию wpkey_add_post_views для увеличения счетчика

Добавьте следующий код в файл functions.php вашей темы или в свой собственный плагин:

function wpkey_add_post_views($postID) {
    $count_key = 'wpkey_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, '1');
    } else {
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

Эта функция проверяет наличие мета-поля, в котором хранится количество просмотров, и увеличивает его на 1 при каждом вызове.

Шаг 2. Вызываем функцию при загрузке поста

Чтобы счетчик срабатывал только при просмотре одиночного поста, добавьте в functions.php:

function wpkey_track_post_views ($post_id) {
    if (!is_single()) return;
    if (empty ($post_id)) {
        global $post;
        $post_id = $post->ID;
    }
    wpkey_add_post_views($post_id);
}
add_action('wp_head', 'wpkey_track_post_views');

Таким образом, при загрузке страницы поста будет увеличиваться счетчик просмотров.

Шаг 3. Отображаем количество просмотров в шаблоне

Чтобы вывести количество просмотров в шаблоне (например, в single.php), используйте:

$views = get_post_meta(get_the_ID(), 'wpkey_post_views_count', true);
echo 'Просмотров: ' . ($views ? $views : '0');

Добавляем систему оценок (лайков и дизлайков) к постам WordPress

Теперь разберемся, как добавить пользователям возможность ставить оценки постам. Оптимально реализовать это через AJAX, чтобы не перезагружать страницу и улучшить UX.

Шаг 1. Добавляем HTML-кнопки для лайков и дизлайков

В шаблоне поста, например, single.php, вставьте следующий блок:

<div id="wpkey-rating" data-postid="<?php the_ID(); ?>">
    <button id="wpkey-like">👍 <span id="wpkey-like-count">0</span></button>
    <button id="wpkey-dislike">👎 <span id="wpkey-dislike-count">0</span></button>
</div>

Шаг 2. Регистрируем скрипт и локализуем данные

В functions.php добавьте:

function wpkey_enqueue_scripts() {
    wp_enqueue_script('wpkey-rating-js', get_template_directory_uri() . '/js/wpkey-rating.js', array('jquery'), null, true);
    wp_localize_script('wpkey-rating-js', 'wpkey_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wpkey_rating_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpkey_enqueue_scripts');

Шаг 3. Создаем обработчик AJAX запросов

Добавьте в functions.php:

function wpkey_handle_rating() {
    check_ajax_referer('wpkey_rating_nonce', 'nonce');

    $post_id = intval($_POST['post_id']);
    $action_type = sanitize_text_field($_POST['type']); // like или dislike

    if(!in_array($action_type, array('like', 'dislike')) || !$post_id) {
        wp_send_json_error('Неверные данные');
    }

    $meta_key = 'wpkey_post_' . $action_type . '_count';
    $count = get_post_meta($post_id, $meta_key, true);
    if(!$count) $count = 0;
    $count++;
    update_post_meta($post_id, $meta_key, $count);

    wp_send_json_success(array('count' => $count));
}
add_action('wp_ajax_wpkey_rating', 'wpkey_handle_rating');
add_action('wp_ajax_nopriv_wpkey_rating', 'wpkey_handle_rating');

Шаг 4. Создаем JavaScript для отправки запросов

Создайте файл js/wpkey-rating.js и вставьте туда:

jQuery(document).ready(function($) {
    $('#wpkey-like, #wpkey-dislike').on('click', function() {
        var type = $(this).attr('id') === 'wpkey-like' ? 'like' : 'dislike';
        var post_id = $('#wpkey-rating').data('postid');
        var data = {
            action: 'wpkey_rating',
            nonce: wpkey_ajax_object.nonce,
            post_id: post_id,
            type: type
        };

        $.post(wpkey_ajax_object.ajax_url, data, function(response) {
            if(response.success) {
                if(type === 'like') {
                    $('#wpkey-like-count').text(response.data.count);
                } else {
                    $('#wpkey-dislike-count').text(response.data.count);
                }
            } else {
                alert('Ошибка: ' + response.data);
            }
        });
    });
});

Использование плагинов для расширения функционала счетчика и рейтинга

Если вы предпочитаете готовые решения, рассмотрите плагины, которые отлично работают с WordPress и легко настраиваются:

  • Post Views Counter — легкий и гибкий плагин для подсчета просмотров постов. Позволяет выводить и сортировать по просмотрам.
  • WP-PostRatings — классический плагин для системы оценок с поддержкой AJAX, несколькими стилями и настройками.
  • Clearfy Pro — комплексный плагин оптимизации, который также включает расширенные возможности по управлению рейтингами и счетчиками.

Установка и настройка этих плагинов обычно не требует знаний программирования, но в некоторых случаях может понадобиться доработка шаблонов.

Советы по оптимизации и безопасности при реализации счетчиков и рейтингов

При создании кастомных решений важно помнить о нескольких моментах:

  • Кэширование: Учитывайте, что кэширование страниц может влиять на точность счетчиков. Для корректной работы счетчиков просмотров обычно используют AJAX-запросы, чтобы обновлять данные динамически.
  • Защита от накруток: Чтобы избежать искусственного увеличения просмотров или лайков, можно ограничить учет просмотров по IP или сессиям, а для рейтингов добавить проверку авторизации или куки.
  • Производительность: Частое обновление мета-полей может нагружать базу данных. Рассмотрите возможность использования transient API для временного хранения данных и периодического обновления.
  • Безопасность: Всегда проверяйте nonce и sanitize входящих данных в AJAX-обработчиках, чтобы предотвратить CSRF и XSS-атаки.

Пример ограничения учета просмотров по IP

Для простейшей защиты добавьте в функцию wpkey_add_post_views проверку по IP с использованием пользовательских сессий или куки. Например:

function wpkey_add_post_views($postID) {
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $key = 'wpkey_viewed_' . $postID;
    $viewed_ips = get_transient($key);
    if(!is_array($viewed_ips)) $viewed_ips = array();

    if(!in_array($user_ip, $viewed_ips)) {
        $count_key = 'wpkey_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, '1');
        } else {
            $count++;
            update_post_meta($postID, $count_key, $count);
        }
        $viewed_ips[] = $user_ip;
        set_transient($key, $viewed_ips, 12 * HOUR_IN_SECONDS);
    }
}

Это позволит считать просмотры от одного IP не чаще одного раза в 12 часов.

Как работать с настройками в WordPress через PHP
15.12.2025
Как удалить файл из медиатеки WordPress по ссылке
06.12.2025
Как добавить пользовательские роли в WordPress с поддержкой AJAX
18.12.2025
Как создать настройку для автоматического удаления старых медиафайлов в WordPress
02.04.2026
WooCommerce: автоматическое удаление неоплаченных заказов по таймауту
27.05.2026

Ресурс в разработке, скоро здесь будет сайт по вордпресс