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

11 декабря 2017

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

Новые лендинги

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

С плагинами

В случае с плагинами все предельно просто. К примеру, можно установить 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;
}

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

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

INNERSTAT
Лучшее за неделю

Подпишитесь на рассылку и получайте новые материалы на электронную почту

Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе Вордпресс.

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

Премиум-темы для Вордпресс с русскоговорящей поддержкой
Подробнее