Выводим время чтения стать в WordPress

Выводим время чтения записи в WordPress

· WordPress, WordPress и Снипеты · 3 мин чтения

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

Для чего это нужно?

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

Логика функции

Немного погуглив, я понял, что среднее кол-во прочитанных слов в минуту ~ 250. Тем самым мне лишь нужно получить текст записи, разбить его на отдельные слова и разделить кол-во слов на 250, округлить получившееся число (сделав его без дробных остатков (например: «2.31232231», что означает, что статья читается в течении 2 минут и 30 секунд). В моем случае — это просто «2 мин».

Функция и как она работает

Функция достаточна простая и в ней сможет разобраться даже начинающий разработчик, но я её все равно разложу все по полочкам. Для начала давайте посмотрим на нее:

/**
 * Получить примерное время чтение записи в WordPress
 * 
 * @return string
 */
function bv2_get_post_reading_time() {
  $words_per_minutes = 250;
  $content_text = is_single() ? get_the_content() : get_post(get_the_ID())->post_content;
  $minutes = round(count(preg_split('/\s/', $content_text)) /  $words_per_minutes);

  if( $minutes == 0 ) {
    return '<span title="'. __('Время прочтения', 'bologerv2').'">читать меньше минуты</span>';
  } else {
    return '<span title="'. __('Время прочтения', 'bologerv2') .'">' . $minutes . ' мин чтения</span>';
  }
}

Сначала я дам объяснение и потом как поставить.

Если вам не интересно ее описание, а ТОЛЬКО УСТАНОВКА то можете перепрыгнуть на следующую часть, где пойдет речь о установке.

Для начала я объявляю переменную $words_per_minute, которая будет хранить в себе кол-во прочитанных слов в минуту (250 в моем случае).

Далее, я создал $content_text который содержит в себе текст записи, в зависимости от того is_single() запись или нет. is_single() возвращает булевое значение (открыта запись полностью или нет).

И если да, то я беру её содержимое, если нет, то мне нужно использовать функцию — get_post(). Как аргумент в get_post(), нужно написать текущий ID записи и чтобы его получить нужно использовать get_the_ID() и далее я вытаскиваю содержимое записи с помощью ->post_content. Это означает, что get_post(get_the_ID()) вернет информацию о записи в виде объекта. Тем самым, я могу получить любую информацию о ней (меня интересует только ее текст).

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

Сейчас поговорим об этой строчке, так как она самая важная:

$minutes = round(count(preg_split('/\s/', $content_text)) /  $words_per_minutes);

Для начала я разбил весь $content_text по пробелам с помощью регулярного выражения и функции preg_split() — у нас получился массив. Далее я посчитал кол-во разбитых слов в массиве с помощью count() и в самом конце я округлил число до целого (например с «1.312312» до «1») с помощью round().

Далее, с помощью if условия  проверяю следующее: если минуты равны нулю, то значит возвращать «читать меньше минуты», иначе — выводим кол-во минут.

Перейдем к установке.

Функция и ее установка

Установка проста до невозможности.

  1. Заходим в папку с текущей темой WordPress
  2. Находим и открывает functions.php
  3. B добавляем функцию, которую я уже написал под заголовком «Функция и как она работает». 
  4. Далее используем название функции (bv2_get_post_reading_time()) для вывода время чтения. В моем случае, я добавил ее в файл single.php, который показывает полную запись и в content.php. Но вы можете для начала добавить только в single.php.
  5. Внутри single.php или content.php пишите <?= bv2_get_post_reading_time() ?>
  6. Заходим на полную запись или в ленту записей и проверяем результат. У вас должно показать «меньше минуты назад» или например «2 мин». Все конечно же зависит от объема текста.

И все готово!  

Демо

Пример работы этого скрипта можно посмотреть в этой записи в самом верху. У меня стоит в точности такая же функция.

Послесловие

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

Источники