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

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

Теория популярности

Обычно для реализации вышеуказанной задачи, разработчики прибегают к простому алгоритму: выводят публикации по количеству просмотров или комментариев. Больше просмотров/комментариев — больше популярность. Кажется, все просто и логично.

Но на мой взгляд, используя такой алгоритм ранжирования, мы допускаем небольшую ошибку. Дело в том, что в этом случае мы не учитываем фактор времени. Это значит, что публикация, предположим, размещенная на сайте год назад, скорее всего будет иметь больше просмотров или комментариев, чем размещенная вчера. Даже если новая объективно лучше и интереснее, чем более старая. Таким образом, старые публикации, по стечению обстоятельств, навсегда пропишутся в блоке «Популярные записи».

На эту мысль натолкнул один известный сайт, посвященный работе в Photoshop. Так, в блоке «Популярные», выводятся уроки, которые качественно хуже, чем более новые. Но, из-за их более раннего появления, имеют больше просмотров. Список популярных записей не меняется вот уже более полутора лет. Нужно ли это и вам?

Что касается популярности по комментариям. Возникают ряд вопросов. Что если пока комментариев на сайте нет? Как ранжировать, если критерий популярности — только комментарии? Вопросов больше, чем ответов.

Создаем алгоритм популярности

Давайте попробуем устранить все эти недостатки, позволяя более новым, и действительно качественным материалам стать популярными. Наш алгоритм — лишь заготовка, которая позволит вам создать более продуманную систему ранжирования. Если на вашем сайте есть несколько сотен или тысяч статей, можно проводить интереснейшие эксперименты. Ну да ладно. Приступим.

За основу возьмем количество просмотров. Однако, чтобы уравнять возможности новых и старых записей, давайте создадим некий индекс популярности, зависящий и от дней существования поста. Формула:

Разберемся. Исходя из формулы, пост «A», который существует 100 дней, и имеет 100 просмотров, будет менее популярен, чем более новый пост «B», но за 1 день, собравший 10 просмотров. Это логично, ведь теоретически, пост «B» за те же 100 дней наберет значительно больше просмотров, чем его конкурент.

Однако, и эта формула не учитывает еще один момент. 100 дней назад посещаемость сайта могла быть всего лишь 1 человек в день, а в момент публикации поста «B» — 100 человек в день. Давайте введем еще один фактор ранжирования. Это показатель комментирования. Логично, ведь если публикацию обсуждают, значит она интересна. Наша формула будет выглядеть следующим образом:

Итак, в нашем алгоритме будут учитываться следующие факторы:

  1. количество просмотров записи
  2. количество дней существования публикации
  3. количество комментариев

Теперь, определившись с формулой, приступим к реализации вывода записей по созданному индексу популярности.

Вывод записей

Создадим заготовку, которая послужит отправной точкой. Выводим 5 записей. Разместите следующий код там, где хотите вывести посты.

Теперь можно его красиво оформит. Этот код нужно разместить в файл style.css вашей темы.

Рассчитываем индекс популярности

Количество просмотров страницы

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

Обязательно считаем каждое посещение страницы. Его нужно разместить в файл одиночной записи, обычно это single.php

На всякий случай, если нужно вдруг вывести во фронтэнде:

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

Считаем количество дней существования поста

Считаем количество комментариев

Итак, мы определили, как будем получать данные каждой записи для подсчета индекса популярности.

Выводим записи по популярности

Есть один важный момент. Если мы станем пересчитывать индекс популярности всякий раз, когда кто-то заходит на сайт, это создаст довольно высокую нагрузку. Сайт может работать медленнее. Чтобы не создавать лишней нагрузки, давайте запланируем задачу, которая позволит нам производить пересчет один раз в сутки. Воспользуемся планировщиком wp_schedule_event(). Разместите код ниже в файл function.php:

Теперь сам вывод постов.

Вывод через шорткод

Для удобства, давайте попробуем выводить записи через шорткод [ popular-posts ] (не забудьте убрать пробелы).

Параметры ob_start() и ob_get_clean() позволяет нам выводить цикл в том месте, где мы хотим. Если их не добавить, список будет выводиться просто вверху до загрузки всего остального контента.

Вместо итогов

Как видим, в выводе постов по популярности нет ничего сложного. С другой стороны, мы получили полностью рабочую функцию, которая позволит отображать действительно интересные читателям публикации. Разумеется, при желании этот алгоритм можно улучшить. Если у вас есть предложения и идеи, пишите в комментариях.

3 коментариев к записи

  • Спасибо за скрипт. Вопрос новичка. Каким образом вывести шорткодом последний запрос на вывод поста?

  • вот пробовал шорткодом вывести не получилось:

    • Прошу прощения за долгую паузу. Ответил в тексте статьи. Посмотрите подзаголовок про вывод через шорткод.

Добавить комментарий