В теме WP Community используется функция подсчета просмотров, которая увеличивает счетчик при каждой перезагрузке страницы. Это позволяет любому пользователю искусственно завышать популярность записей простым обновлением страницы (клавишей F5). Проблема кроется в использовании параметра self::COUNT_ALL по умолчанию в файле src/Features/ViewsCounter.php.
Предлагаемое решение добавляет проверку через куки-файлы. Проверка, которая позволяет считать только уникальные просмотры от одного пользователя в течение суток.
Как добавить защиту
⚠️ Важное предупреждение: Перед внесением любых изменений в код темы обязательно создайте полную резервную копию сайта! Это пример кода, который можно доработать при необходимости.
Добавьте следующий код в файл functions.php вашей дочерней темы (WP Community Child):
/**
* Защита от накрутки просмотров для WP Community
* Добавляет проверку куки перед подсчетом просмотров
*/
add_filter('wpcommunity/views/should_count', 'wpcommunity_prevent_view_refresh', 10, 2);
function wpcommunity_prevent_view_refresh($should_count, $post_id) {
// Если система уже решила не считать, не меняем решение
if (!$should_count) {
return $should_count;
}
// Проверяем куки
$cookie_name = 'wpc_viewed_' . $post_id;
// Если куки уже есть - не считаем этот просмотр
if (isset($_COOKIE[$cookie_name])) {
return false;
}
// Устанавливаем куки на 24 часа
setcookie($cookie_name, '1', time() + (86400), '/', '', false, true);
// Разрешаем подсчет
return true;
} Важно: Вставляйте код в конец файла functions.php, перед закрывающим тегом ?> (если он присутствует), или если его нет — просто в конец файла.
Как работает механизм защиты
Система использует фильтр WordPress wpcommunity/views/should_count, который встроен в класс ViewsCounter темы WP Community. Этот фильтр определяет, нужно ли увеличивать счетчик просмотров для конкретной записи.
При первом посещении записи пользователем создается уникальная куки с именем wpc_viewed_[ID_записи], которая хранится в браузере 24 часа. При повторном посещении этой же записи (в том числе при обновлении страницы) система обнаруживает существующую куки и блокирует увеличение счетчика.
Практические сценарии работы
- Первый просмотр записи: пользователь заходит на страницу поста, куки отсутствуют → система устанавливает куки на 24 часа → счетчик увеличивается на 1.
- Повторный просмотр в течение 24 часов: пользователь обновляет страницу или возвращается к записи → система обнаруживает существующую куки → счетчик не увеличивается.
- Посещение через 24 часа: куки автоматически удаляются браузером → процесс начинается заново → счетчик увеличивается на 1.
Преимущества решения
- Эффективная защита от накрутки путем обновления страницы
- Учет уникальных посетителей (1 человек = 1 просмотр в сутки)
- Минимальное вмешательство в логику темы
- Полная совместимость с существующей системой подсчета
- Безопасность (куки недоступны для JavaScript)
Ограничения и примечания
Система имеет естественные ограничения: при очистке куки в браузере или использовании режима инкогнито счетчик сработает повторно. Разные браузеры на одном устройстве используют разные хранилища куки. Однако для большинства реальных случаев эти ограничения несущественны, так как обычные пользователи не занимаются целенаправленной накруткой.
Проверка работоспособности
После добавления кода протестируйте работу системы:
- Откройте любую запись на сайте (счетчик должен увеличиться)
- Обновите страницу (счетчик не должен измениться)
- Проверьте другую запись (счетчик должен увеличиться только для нее)
- Используйте другой браузер или режим инкогнито для проверки
Примечание: Если после добавления кода возникнут ошибки на сайте, восстановите оригинальную версию файла functions.php из созданной резервной копии.

