Замена стандартной функции the_excerpt() в WordPress: ускорение сайта!

Удаление текста и замена стандартной функции the_excerpt()

Я заметил, что функция WordPress the_excerpt() довольно тяжелая. Она использует много ресурсов и времени для выполнения, так как вызывает другие функции, такие как get_the_excerpt() и the_content(), и применяет к ним различные хуки, включая саму the_excerpt(). В итоге выполняется много операций, которые не всегда необходимы. Например, я обрабатываю отрывки текста просто — это короткое описание статьи, в котором я вырезаю небольшую часть.

Я терпел этот недостаток, пока не понадобилось обрезать текст до определенного количества символов. Тогда я решил написать функцию для обрезки текста.

Результат замены the_excerpt() меня порадовал: время генерации страницы снизилось в среднем с 0.850 секунд до 0.550 секунд при 9 вызовах the_excerpt() (это на компьютере, на сервере обычно меньше). 9 вызовов — это количество записей, отображаемых в категории, к каждой из которых применялась функция the_excerpt().

Ниже представлена функция, которая может заменить станда��тную функцию WordPress the_excerpt().

<?php

/**

Как работает функция

  1. Обрезает текст до заданного количества символов, указанного в параметре maxchar.

  2. Понимает тег <!--more-->. Если он присутствует, количество символов игнорируется, и отображается все, что выше тега <!--more-->, включая HTML-разметку.

  3. Можно указать, нужно ли сохранять переносы строк или выводить весь текст в одной строке. По умолчанию переносы строк сохраняются. Если хотите "непрерывный текст", установите параметр autop = 0.

  4. Можно указать, какие HTML-теги не следует удалять. Например, если мы хотим сохранить теги <strong> и <em>, укажите их так: save_tags=<strong><em>.

  5. Функцию также можно использовать для обрезки любого текста, переданного ей. Для этого укажите текст в параметре text.

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

Как использовать

Вставьте приведенный выше код в файл functions.php вашей темы. А чтобы вывести обрезанный текст, вызовите функцию так:

<?php echo kama_excerpt( [ 'maxchar'=>100, 'text'=>'blabla' ] ); ?>

Чтобы заменить стандартную функцию the_excerpt(), просто замените the_excerpt() на kama_excerpt(). Все это должно быть внутри цикла WordPress.

ВАЖНО: Параметр text не нужен, когда вы заменяете the_excerpt()!

Пример использования функции для обрезки любого текста:

$str = "Функция [foo]некоторый текст[/foo] делает обрезку текста для WordPress,
может быть применена [foo url='bar'] и на других движках.";

echo kama_excerpt([ 'text'=>$str, 'maxchar'=>70 ]);

Мы получим:

Функция делает обрезку текста для WordPress,
может быть применена и на других ...

Когда обрезается текст, переданный функции, срабатывает только необходимая часть функции (без лишних операций).

Очень простой пример обрезки текста

Если вы не хотите использовать функцию и просто хотите обрезать текст без сохранения HTML-тегов и т.д., вы можете использовать следующую короткую строку внутри цикла WordPress:

<?php
$maxchar = 152;
$text = strip_tags( get_the_content() );
echo mb_substr( $text, 0, $maxchar );
?>

152 — это количество оставшихся символов.

Или воспользуйтесь функцией wp_trim_words().

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *