Доброго времени суток. 🙂
Сейчас во многих блогах, статейниках и прочих информационных сайтах стало популярным выводить информацию о предполагаемом времени чтения. Обычно эту информацию размещают перед текстом или в тизере статьи.
Доброго времени суток. 🙂
Сейчас во многих блогах, статейниках и прочих информационных сайтах стало популярным выводить информацию о предполагаемом времени чтения. Обычно эту информацию размещают перед текстом или в тизере статьи.
Недавно мне тоже была поставлена задача сделать вывод такой информации на одной из тем. Раньше не сталкивался с подобной задачей, но видел подобное не раз. Выглядит это примерно так:
Немного изучив материал, я понял, что нужна небольшая функция ибо вариант с плагином отпал сразу. Не настолько тут все сложно, чтобы подключать тяжелую артиллерию. Немного погуглив, был найден кусок кода из одной забугорной темы. Ее разработчик предоставил этот фрагмент, чтобы другие могли воспользоваться. Но с ним возникла проблема, он почему то не выводил ничего.
Изучив код, я разорался в нем и немного переделал. Там использовалась функция для подсчета слов в тексте, которая не работает с кириллицей, только латиница, поэтому у меня оно и не считало как нужно. Автор того кода использовал метод подсчета через - 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; }
Давайте разберем ее, чтобы понять как она устроена.
Как упомянул выше, если хотите то время можно выводить с секундами, просто замените седьмую строку, где начинается условие, на немного другой код.
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();?>
На этом все, спасибо за внимание. 🙂