В этой статье мы будем разбирать как в списке статьей вывести информацию о том, сколько времени нужно для чтения статьи.
Я создал несколько записей и наполнил их текстом разного размера.
Если у вас статьи уже выведены на сайте, вам нужно будет найти цикл, который отвечает за его вывод.
Я создам свой цикл и выведу статьи на странице:
<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>
И вот что получилось на выходе:
Теперь давайте считать сколько будем тратить на прочтение страниц. Как получить это число? Все просто. Нам нужно посчитать, сколько в статьей знаков и поделить на среднюю скорость чтения, потом округлим число до целого.
Это и будет количество минут.
Для начала посчитаем количество знаков в статье. В нашем цикле переменная $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>
Идем и проверяем:
Теперь нам нужно разделить число на среднюю скорость чтения, которая равна 1500 знаков в минуту. Упакуем результат выражения в переменную $time_for_read и выведем на странице:
$post_content_length = strlen($post->post_content);
$time_for_read = $post_content_length / 1500;
echo $time_for_read;
Теперь нужно округлить число. Нам поможет функция 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.
Но это еще не все, нам нужно подставить значение переменной в тег и добавить слово «минут»:
<span class="article__time"><? echo $time_for_read; ?> минут</span>
Все бы ничего, но вот «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>
Вот теперь все, мой юный падаван, ты повелеваешь временем.
Код страницы полностью:
<?
/**
* 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(); ?>
Видеоурок:
Канал о фрилансе
Там я делюсь фишками о фрилансе: деньги, клиенты, автоматизация, фриланс. Раньше это был закрытый материал с платным доступом. Сейчас он открыт. Иногда подписчикам будет открываться платные материалы. Подписаться