Вы здесь
Главная > Мой блог > WEB-разработка > Обрезка текста и/или замена стандартной функции the_excerpt()

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

Как-то раз обратил внимание, что функция WordPress the_excerpt() (отрывок/цитата) какая-то громоздкая (на её выполнение уходит много времени и ресурсов, чем она этого заслуживает), в подробности, почему она такая, вдаваться не буду, скажу только, что the_excerpt() вызывает get_the_excerpt(), the_content() и ко всем ним применяются различные хуки, включая сам the_excerpt(). Там получается немало операций, для всего-то вывода какого-то отрывка текста. Лично я к цитатам отношусь крайне просто – коротко сказать о чем статья, вырезав небольшой её кусок или описать ее вкратце.

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

Результат замены the_excerpt() меня порадовал: генерация страницы уменьшилась в среднем с 0,850 сек до 0,550 сек, при 9 вызовах the_excerpt() (это время на моем компьютере, на сервере естественно оно меньше). 9 вызовов – это количество выводимых постов в категории, к каждому из которых применялся the_excerpt().

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

Что умеет функция?

  1. Обрезать до определенного количества символов. Указывается в параметре maxchar;
  2. Понимает тег <!–more–> в посте. Если он присутствует желаемое количество выводимых символов игнорируется и выводится все что выше  <!–more–> с сохранением HTML тегов;
  3. Можно указать сохранять переносы строк или писать весь текст в одну строку (по умолчанию переносы сохраняются, если нужен “сплошняк” ставим параметр save_format=0) ;
  4. Так же, можно использовать функцию, чтобы обрезать любой текст, который ей будет передан через параметр text . При этом половина кода пропускается, срабатывает только необходимая его часть.

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

Для использования вставляем указаный выше код в файл functions.php вашего шаблона, а где нужно вывести обрезанный текст вызываем функцию так: kama_excerpt("maxchar=100&text=бла бла");.

Чтобы заменить стандартный the_exerpt() нужно просто заменить the_exerpt(); на kama_excerpt(); Все это должно быть внутри цикла the loop. ВАЖНО! Парметр text при замене the_exerpt(); указывать не надо!

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

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

Источник: http://wp-kama.ru

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

 

2 thoughts on “Обрезка текста и/или замена стандартной функции the_excerpt()

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

Top