Как посмотреть самые популярные wordpress-посты за год

Возникла задача. Я в «Итогах года» всегда публикую самые популярные посты, написанные в этом году. То есть, не тупо самые посещаемые в этом году, найти их, как раз, нет никакой проблемы. А те, что были опубликованы в этом году и имеют больше всего хитов. Как это сделать?

Первый порыв — пойти в Яндекс.Метрику. Но тут же мы натыкаемся на проблему — она не получает такой параметр как дата публикации страницы. Уже привычно иду за советом к Гроку, он говорит — скорми стандартному отчёту по посещаемости список страниц, опубликованных в этом году в виде параметров фильтра.

Выдрать такой список страниц можно, например, при помощи плагина Export All URLs. Инсталлируем плагин, выгружаем список, скармливаем отчёту. И натыкаемся на ограничение — параметров фильтра не может быть больше сорока. А я писуч, у меня может быть и сто постов за год (сейчас их 48). Спросил техподдержку Яндекс.Метрики, есть ли выход. Мне ответили, увы.

Ок, копаем дальше. Я использую плагин Post Views Counter (это его чиселку вы можете видеть в конце каждого поста). Этот плагин также добавляет чиселку в грид «Записи»:

Грид записей вордпресс.

В принципе, рабочее решение — упорядочить посты по этому полю и листать, выписывая на листочек публикации из 2025 года. Предыдущие два раза я так делал. Это тупо и медленно.

Я пошёл с вопросом в комьюнити @wordpress_ru в телеграме. Мне там посоветовали попросить нейросеть составить для меня SQL-запрос и вытащить данные из базы напрямую. Сказано-сделано. Но Грок генерирует неработающую херню, предположив, что каунтер хранит данные в wp_postmeta.

ЖПТ похож на твоего начитанного друга, у которого есть ответ на любой вопрос. А если ответа нет, он всё равно, что-нибудь нафантазирует, чтобы авторитет в твоих глазах не терять.

Неизвестный автор

Давайте разбираться. Post Views Counter хранит данные в табличке wp_post_views. Сначала я посмотрел и ничего не понял:

wp_post_views

Почему против каждого поста единичка? Как он хранит посещения? Простите меня, пожалуйста, я не разработчик и имею право так тупить. Посмотрев на количество записей, сообразил: каждый день записан одной строчкой. Сколько в этот день было хитов, такая и будет чиселка в count. Всё, дальше уже дело техники. Пишу промт и Грок выдаёт:

SELECT 
    p.post_title,
    COALESCE(SUM(v.count), 0) AS view_count
FROM 
    wp_posts p
LEFT JOIN 
    wp_post_views v ON p.ID = v.id
WHERE 
    p.post_type = 'post'
    AND p.post_status = 'publish'
    AND YEAR(p.post_date) = 2025
GROUP BY 
    p.ID, p.post_title
ORDER BY 
    view_count DESC
LIMIT 10;

YEAR(p.post_date) = 2025 — это год, за который мы вытаскиваем записи. Думаю, если вам потребуется кастомный период, сообразите, как этот параметр изменить.

LIMIT 10; — это количество записей, которые надо вывести.

Выполняем запрос и получаем:

post_titleview_count  
Собеседование на руководителя проектов. Софт скилы…2580
Руководитель проектного офиса1780
Техническое собеседование на руководителя проектов…1245
Как правильно ставить задачи в таск-трекере1060
Фильтрация входящих задач980
Множество проектов, срываются сроки — что делать?870
Анализ эффективности проекта835
Меня хотят уволить. Что делать?805
Три базовых инструмента руководителя проекта735
Инструменты для слаживания команды720

Ерунда какая-то. У постов куда меньше просмотров на самом деле. Давайте разбираться. Вытаскиваем стату посещений по одному посту, например, таким запросом:

SELECT * FROM `wp_post_views` WHERE `id`=13798

И обнаруживаем такие артефакты:

Обратите внимание на две последние строчки. Хитрый плагин пишет в них итоги, за каждый год и всего. Давайте изменим наш запрос.

SELECT 
    p.post_title,
    COALESCE(v.count, 0) AS view_count
FROM 
    wp_posts p
LEFT JOIN 
    wp_post_views v ON p.ID = v.id AND v.period = '2025'
WHERE 
    p.post_type = 'post'
    AND p.post_status = 'publish'
    AND YEAR(p.post_date) = 2025
ORDER BY 
    view_count DESC
LIMIT 10;

Получаем табличку (линки вставил вручную):

post_titleview_count 
Собеседование на руководителя проектов. Софт скилы, Ciliz516
Руководитель проектного офиса356
Техническое собеседование на руководителя проектов, Twinby249
Как правильно ставить задачи в таск-трекере212
Фильтрация входящих задач196
Множество проектов, срываются сроки — что делать?174
Анализ эффективности проекта167
Меня хотят уволить. Что делать?161
Три базовых инструмента руководителя проекта147
Инструменты для слаживания команды144

Проверяем. Да, совпадает. Вот теперь вы восхитительны.

Лапенко инженер.

Опубликовано

в

от

Предыдущий пост
Таблица со страницами вакансий крупных компаний, нанимающих на удалёнку. Яндекс,…