499

Время чтения статьи на wordpress

Видеоурок:

Привет, друзья!

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

Я создал несколько записей и наполнил их текстом разного размера.

Время чтения статьи на wordpress 1
созданные статьи

Если у вас статьи уже выведены на сайте, вам нужно будет найти цикл, который отвечает за его вывод.

Я создам свой цикл и выведу статьи на странице:

<div class="blog">
    <ul class="blog__list">
    <?
        $agrs = array(
            'numberposts' => -1,
            'post_type'   => 'post'
        );
        $posts = get_posts($agrs);

        foreach ($posts as $post) {
            setup_postdata($post);
    ?>

        <li class="blog__item article">
            <p class="article__title">
              <a href="<? the_permalink(); ?>">
                <? the_title(); ?>
              </a>
            </p>
            <span class="article__time"> Количество минут </span>
            <p class="article__descr">Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вопрос бросил собрал что. Текстами сих назад власти великий букв.</p>
        </li>

    <? }; //endforeach ?>
    </ul>
</div>

И вот что получилось на выходе:

Время чтения статьи на wordpress 2
вывод статей на странице

Теперь давайте считать сколько будем тратить на прочтение страниц. Как получить это число? Все просто. Нам нужно посчитать, сколько в статьей знаков и поделить на среднюю скорость чтения, потом округлим число до целого.
Это и будет количество минут.

Для начала посчитаем количество знаков в статье. В нашем цикле переменная $post имеет свойство post_content, в котором находится весь контент нашей страницы.

$post->post_content;

Для подсчета знаков мы воспользуемся функцией strlen ():

strlen($post->post_content);

Давайте запишем полученное число в переменную и выведем ее на странице:

<div class="blog">
    <ul class="blog__list">
    <?
        $agrs = array(
            'numberposts' => -1,
            'post_type'   => 'post'
        );
        $posts = get_posts($agrs);

        foreach ($posts as $post) {
            setup_postdata($post);

            $post_content_length = strlen($post->post_content);
            echo $post_content_length;
    ?>

        <li class="blog__item article">
            <p class="article__title"><a href="<? the_permalink(); ?>"><? the_title(); ?></a></p>
            <span class="article__time"> Количество минут </span>
            <p class="article__descr">Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вопрос бросил собрал что. Текстами сих назад власти великий букв.</p>
        </li>

    <? }; //endforeach ?>


    </ul>
</div>

Идем и проверяем:

Время чтения статьи на wordpress 3
Получили количество знаков в статьях

Теперь нам нужно разделить число на среднюю скорость чтения, которая равна 1500 знаков в минуту. Упакуем результат выражения в переменную $time_for_read и выведем на странице:

$post_content_length = strlen($post->post_content);
$time_for_read = $post_content_length / 1500;
echo $time_for_read;
Время чтения статьи на wordpress 4
Получили количество минут

Теперь нужно округлить число. Нам поможет функция round (). Округляем и выводим на странице:

$post_content_length = strlen($post->post_content);
$time_for_read = $post_content_length / 1500;
$time_for_read = round($time_for_read);
echo $time_for_read;
Время чтения статьи на wordpress 5
округлили минуты

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

Но это еще не все, нам нужно подставить значение переменной в тег и добавить слово «минут»:

<span class="article__time"><? echo $time_for_read; ?> минут</span>
Время чтения статьи на wordpress 6
подставили количество минут

Все бы ничего, но вот «4 минут» — не звучит. Нам нужно чтобы подставлялось нужное слово. Для этого мы добавим функцию, которая поможет сделать это:

<?
function getNumEnding($number, $endingArray) {
    $number = $number % 100;
    if ($number>=11 && $number<=19) {
        $ending=$endingArray[2];
    }
    else {
        $i = $number % 10;
        switch ($i) {
            case (1): $ending = $endingArray[0]; break;
            case (2):
            case (3):
            case (4): $ending = $endingArray[1]; break;
            default: $ending=$endingArray[2];
        }
    }
    return $ending;
}
?>

Ее нужно поставить перед нашим циклом или в начале страницы.

Что она делает?

Функция в зависимости от числа подставляет слово, которое мы указываем в параметрах функции. Рассмотрим их:

getNumEnding($number, array('минуту','минуты','минут'));
 
 
// Первый аргумент масcива - слово, которое должно соответствовать числам: 21, 31, 41, 51
// Второй аргумент масива - слово, которое должно соответствовать числам: 22, 32, 42, 52
// Третий аргумент масива - слово, которое должно соответствовать числам: 15, 25, 35, 45

Используем в нашем проекте, вместо $number подставим переменную с минутами $time_for_read, а в массиве поставим нужные слова.

$post_content_length = strlen($post->post_content);
$time_for_read = $post_content_length / 1500;
$time_for_read = round($time_for_read);
$time_ending = getNumEnding($time_for_read, array('минуту','минуты','минут'));

И нам нужно поменять наше слово «минут» на переменную $time_ending:

<span class="article__time">
  <? echo $time_for_read; ?> <? echo  $time_ending; ?>
</span>
Время чтения статьи на wordpress 7
Слово подставляется в зависимости от числа

Вот теперь все, мой юный падаван, ты повелеваешь временем.

Код страницы полностью:

<?

/**
 * Template Name: Blog
 */


 get_header();

 function getNumEnding($number, $endingArray) {
    $number = $number % 100;
    if ($number>=11 && $number<=19) {
        $ending=$endingArray[2];
    }
    else {
        $i = $number % 10;
        switch ($i) {
            case (1): $ending = $endingArray[0]; break;
            case (2):
            case (3):
            case (4): $ending = $endingArray[1]; break;
            default: $ending=$endingArray[2];
        }
    }
    return $ending;
}
?>

<main class="container page">

    <h1 class="page__title">Блог</h1>

    <div class="blog">
        <ul class="blog__list">
        <?
            $agrs = array(
                'numberposts' => -1,
                'post_type'   => 'post'
            );
            $posts = get_posts($agrs);

            foreach ($posts as $post) {
                setup_postdata($post);

                $post_content_length = strlen($post->post_content);
                $time_for_read = $post_content_length / 1500;
                $time_for_read = round($time_for_read);
                $time_ending = getNumEnding($time_for_read, array('минуту','минуты','минут'));

        ?>

            <li class="blog__item article">
                <p class="article__title"><a href="<? the_permalink(); ?>"><? the_title(); ?></a></p>
                <span class="article__time"><? echo $time_for_read; ?> <? echo  $time_ending; ?></span>
                <p class="article__descr">Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вопрос бросил собрал что. Текстами сих назад власти великий букв.</p>
            </li>

        <? }; //endforeach ?>


        </ul>
    </div>

</main>


<? get_footer(); ?>

Поделиться
Отправить

Комментарии