Дизайн та розробка сайту

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

Как добавить время чтения к записи Wordpress

Доброго времени суток. 🙂

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

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

Недавно мне тоже была поставлена задача сделать вывод такой информации на одной из тем. Раньше не сталкивался с подобной задачей, но видел подобное не раз. Выглядит это примерно так:

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

Изучив код, я разорался в нем и немного переделал. Там использовалась функция для подсчета слов в тексте, которая не работает с кириллицей, только латиница, поэтому у меня оно и не считало как нужно. Автор того кода использовал метод подсчета через - str_word_count().

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

function estimated_reading_time(){
$post = get_post();
$postcnt = strip_tags( $post->post_content );
$words = count(preg_split('/\s+/', $postcnt));
$minutes = floor( $words / 120 );
$seconds = floor( $words % 120 / ( 120 / 60 ) );
if (1 <= $minutes){$estimated_time = $minutes . ' мин на чтение' . ($minutes == 1 ? '' : 's');}
else{$estimated_time = $seconds . ' сек на чтение' . ($seconds == 1 ? '' : 's');}
echo $estimated_time;
}

Давайте разберем ее, чтобы понять как она устроена.

  • $post = get_post(); - Создаем переменную $post, которая будет содержать в себе текст записи.
  • $postcnt = strip_tags( $post->post_content ); - Новая переменная в которой из текста записи убираем все теги, оставляя голый текст.
  • $words = count(preg_split('/\s+/', $postcnt)); - Третья переменная, в которой и ведется подсчет слов используя вторю переменную.
  • $minutes = floor( $words / 120 ); - Переменная в которой мы вычисляем минуты, что понадобятся для чтения текста записи. Тут используется простая формула. Берем весь текст и разделяем на среднюю скорость чтения - 120 слов в минуту. Если хотите сменить скорость, укажите свое число.
  • $seconds = floor( $words % 120 / ( 120 / 60 ) ); - Переменная, для вычисления секунд. если текст короткий. Ну и если хотите можно указывать время чтения статьи вместе с секундами, например - 2мин 32сек, если вам нужна прям такая точность.
  • Дальше, мы просто создаем условие, если время чтения больше минуты то выводим текст в минутах, в противном случаи в секундах
  • Ну и в конце выводим результат.

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

if (1 <= $minutes){$estimated_time = $minutes . ' мин' . ($minutes == 1 ? '' : 's') . ', ' . $seconds . ' сек' . ($seconds == 1 ? '' : 's');}

Данная функция добавляется в файл function.php или другой файл вашей темы, где вы добавляете пользовательские функции. Добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

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

Чтобы вывести время в шаблоне вашей темы, в том место где хотите видеть надпись с временем, просто добавьте вызов функции. Это может быть single.php,category.php,content.php и тд. Все зависит от вашей темы, сказать точно я не могу.

bm_estimated_reading_time();

Если добавляете в среду HTML, то не забудьте теги PHP и код будет таким:

<?php estimated_reading_time();?>

На этом все, спасибо за внимание. 🙂

Дизайн та розробка сайту

Back to top