PHP функция вывода времени на чтение WordPress с поддержкой Русского и Английского языка

Показывать пользователю, сколько времени займет чтение статьи, может быть полезно по нескольким причинам:

  1. Управление ожиданиями: Оценка времени чтения дает читателям возможность заранее понять, сколько времени им потребуется, чтобы прочитать статью полностью. Это помогает им принять решение о том, стоит ли начинать чтение сейчас или отложить его на более подходящее время.
  2. Улучшение пользовательского опыта: Предоставление информации о времени чтения улучшает общий пользовательский опыт, делая ваш сайт или блог более информативным и удобным для использования. Читатели могут легче навигироваться по контенту и решать, какие статьи им стоит уделить внимание.
  3. Увеличение вовлеченности: При оценке времени чтения пользователи могут быть более склонны прочитать статью до конца, так как они заранее знают, сколько времени это займет. Это может привести к увеличению вовлеченности и продолжительности сессии на вашем сайте.
  4. Помощь в принятии решений: Оценка времени чтения может помочь читателям определить, насколько глубоко статья затрагивает определенную тему. Если время чтения небольшое, это может указывать на краткий обзор или введение. Если время чтения большое, это может указывать на более подробную статью, содержащую много информации.
  5. Привлечение внимания: Показывая время чтения, вы можете привлечь внимание читателей к тому, что ваш контент ценен и заслуживает их времени. Это может способствовать увеличению количества прочтений и снижению отказов.

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

Функция подсчета слов

Первым шагом является создание функции, которая подсчитывает количество слов в тексте статьи:

/**
 * Подсчёт слов в статье.
 *
 * @param string $content Текст статьи.
 *
 * @return int Количество слов в тексте.
 */
function count_words_clean($content)
{
    // Удаление HTML-тегов
    $content = strip_tags($content);

    // Удаление спецсимволов, таких как  
    $content = html_entity_decode($content, ENT_QUOTES, 'UTF-8');

    // Замена множественных пробелов одним пробелом
    $content = preg_replace('/\s+/', ' ', $content);

    // Подсчет количества слов на русском и английском языках
    $words      = preg_split('/\p{Z}+/u', $content, -1, PREG_SPLIT_NO_EMPTY);
    $word_count = count($words);

    return $word_count;
}

Эта функция выполняет следующие действия:

  1. Удаляет HTML-теги из текста.
  2. Удаляет спецсимволы, такие как  .
  3. Заменяет множественные пробелы одним пробелом.
  4. Подсчитывает количество слов на русском и английском языках.

Функция вывода времени на чтение

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

/**
 * Время на чтение в минутах.
 *
 * @param int $post_id ID статьи.
 *
 * @return string Время на чтение статьи с подходящим склонением.
 */
function get_time_to_read($post_id)
{
    // Количество слов в минуту, которое считается средней скоростью чтения
    define("WORDS_PER_MINUTE", 250);

    $article = get_post_field('post_content', $post_id);
    $time    = ceil(count_words_clean($article) / WORDS_PER_MINUTE);

    // Функция для склонения слов в зависимости от числа
    $decline_word = function ($number, $words) {
        $num = $number % 100;
        if ($num > 19) {
            $num = $num % 10;
        }

        switch ($num) {
            case 1:
                return $words[0];
            case 2:
            case 3:
            case 4:
                return $words[1];
            default:
                return $words[2];
        }
    };

    $word_declination = array(
        __('минута чтения', 'THEME_DOMAIN'),
        __('минуты чтения', 'THEME_DOMAIN'),
        __('минут чтения', 'THEME_DOMAIN')
    );

    $label       = $decline_word($time, $word_declination);
    $totalString = '— ' . $time . ' ' . $label;

    return $totalString;
}

В этой функции мы:

  1. Определяем константу для средней скорости чтения (250 слов в минуту).
  2. Получаем текст статьи по ее ID.
  3. Вычисляем время на чтение статьи, разделив количество слов на среднюю скорость чтения.
  4. Склоняем слово “минута” в зависимости от вычисленного времени с помощью анонимной функции.
  5. Формируем строку с временем на чтение и подходящим склонением слова “минута”.

Использование функций

Теперь вы можете использовать функцию get_time_to_read() для вывода времени на чтение статьи. Просто передайте ID статьи в качестве параметра, и функция вернет строку с временем и подходящим склонением слова “минута”.

Например:

$post_id = 1; // получаем ID записи, можно использовать $post->ID
echo get_time_to_read($post_id);

Вышеуказанный код выведет время на чтение статьи с ID 1, с подходящим склонением слова “минута” для русского языка. Для английского языка нужно будет изменить THEME_DOMAIN на ваш и обновить pot file, затем через loco translate сделать перевод.

Почему не подойдет функция из PHP str_word_count

Функция str_word_count() из PHP может использоваться для подсчета слов в строке, но она может не всегда быть наилучшим выбором, особенно для многоязычного контента или текста с разметкой HTML. Вот несколько причин, почему функция str_word_count() может быть недостаточно подходящей в некоторых ситуациях:

  1. Поддержка языков: Функция str_word_count() хорошо работает с английским текстом, но может столкнуться с проблемами при работе с текстом на других языках, таких как русский. Это связано с тем, что str_word_count() основана на пробелах и символах переноса строки для определения границ слов. В некоторых языках, таких как русский, слова могут включать буквы и символы, которые не распознаются функцией str_word_count().
  2. Работа с HTML-разметкой: Функция str_word_count() подсчитывает слова в строке, но не обрабатывает HTML-теги или спецсимволы, такие как  . Это означает, что если ваш текст содержит HTML-разметку, str_word_count() может некорректно подсчитать количество слов, так как она будет считать теги и спецсимволы за слова.

В связи с этим, для более точного подсчета слов в статье, особенно если она содержит многоязычный контент или HTML-разметку, рекомендуется использовать пользовательскую функцию, такую как count_words_clean(). Эта функция предоставляет лучшую поддержку различных языков и корректно обрабатывает HTML-разметку и спецсимволы, что позволяет получить более точный подсчет слов в тексте.

Заключение

Мы разработали две функции на PHP для подсчета слов и вывода времени на чтение статьи с корректной работой на русском и английском языках. Эти функции можно использовать в ваших проектах для предоставления полезной информации читателям и улучшения пользовательского опыта.

Похожие посты