Некоторые информационные ресурсы в анонсах своих публикаций кроме основных метаданных публикуют время, которое потребуется читателю на прочтение всей статьи. Это очень удобно, особенно в случае с лонгридами. Сегодня я покажу, как такая функция реализуется в Вордпресс.
Задача решается двумя традиционными способами. С помощью плагина и вручную, для чего создается специальная функция, которая и будет считать время.
С плагинами
В случае с плагинами все предельно просто. К примеру, можно установить Reading Time WP или любой другой похожий плагин. Можно даже зайти дальше и установить Worth The Read. Он выведет динамический прогресс-бар, который будет заполняться по мере скроллинга страницы.
Без плагинов
Без плагинов задача тоже решается довольно просто. Например, способом, предложенным Мэттом Бирчлером, смысл которого заключается в подсчете количества слов в записи, делением этого числа на среднюю скорость чтения, равную 200 словам в минуту и последующим округлением до целого.
function reading_time() { $content = get_post_field( 'post_content', $post->ID ); $word_count = str_word_count( strip_tags( $content ) ); $readingtime = ceil($word_count / 200); if ($readingtime == 1) { $timer = " minute"; } else { $timer = " minutes"; } $totalreadingtime = $readingtime . $timer; return $totalreadingtime; }
Вывести значение можно в любом месте шаблона таким образом.
<?php echo reading_time(); ?>
Способ адаптирован под англоязычные сайты. В русском языке формы склонения имеют несколько иную механику. Поэтому, функцию можно упростить.
function reading_time() { $content = get_post_field( 'post_content', $post->ID ); $word_count = str_word_count( strip_tags( $content ) ); $readingtime = ceil($word_count / 200); $totalreadingtime = $readingtime . ' мин.'; return $totalreadingtime; }
Или, наоборот, усложнить.
function reading_time() { $content = get_post_field( 'post_content', $post->ID ); $word_count = str_word_count( strip_tags( $content ) ); $readingtime = ceil($word_count / 200); if ($readingtime == 1) { $timer = " минуту"; } elseif ($readingtime == 2 || $readingtime == 3 || $readingtime == 4) { $timer = " минуты"; } else { $timer = " минут"; } $totalreadingtime = 'Чтение займет ' . $readingtime . $timer; return $totalreadingtime; }
Таким образом, будут выводиться корректные словоформы по двадцатую минуту включительно. Больше и не нужно, наверное. Если все таки необходимо перекрыть все возможные комбинации, можно добавить дополнительную функцию, которая сможет отработать любое число. В интернете очень много рабочих примеров таких функций, не вижу смысла дублировать.
⚡️ Будни веб‑разработчика на фрилансе и ежедневно полезные материалы по разработке на моем канале в Телеграм — присоединяйтесь!