X
Заказать услугу

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

Пример
  • 2020-06-04
  • 713 просмотр

    0 комментарий

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

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

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

Как добавить время чтения к записи 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 bm_estimated_reading_time();?>

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

Если Вам был полезным мой труд, можете поддержать сайт, обменяться со мной текстовыми ссылками или посмотреть рекламку, что займет 2 минуты :)

Оцените статью
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
Проголосовало: 3, в среднем: 5 из 5
Читайте также
Комментариев нет. Оставьте первый

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

Чтобы оставить комментарий - заполните поля ниже. Ваш e-mail не будет опубликован. Все поля обязательны

Нажмите, чтобы добавить код в комментарий. Далее добавьте свой код внутрь тегов <code> тут код </code>
Я ознакомлен(а) с политикой конфиденциальности и даю согласие на обработку персональных данных*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.