logo

Вывод анонса с заданным количеством слов

24 мая 2015 в 15:06 Блог веб-разработчика
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
Загрузка...
НЕТ ВРЕМЕНИ ЧИТАТЬ СТАТЬЮ?
Но вам требуется помощь в настройке Вывод анонса с заданным количеством слов ? Получите индивидуальную мини-консультацию по Скайпу или WhatsApp.

Цена: 500 руб.Оформить заказ и оплатить

Если вы собираетесь делать все самостоятельно — продолжайте чтение!

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

2015-05-24_180618

Для этого я использую нижеследующую простенькую функцию. В файл functions.php WordPress-темы необходимо вставить следующий код:

Код функции:

[php]
/**
* Обрезка текста (excerpt). Шоткоды вырезаются. Минимальное значение maxchar может быть 22.
* version — 2.0
*
* maxchar — количество символов.
* text — какой текст обрезать (по умолчанию берется excerpt поста, если его нету, то content, если есть тег <!—more—>, то maxchar игнорируется и берется все, что до <!—more—> как есть (с HTML)
* save_format — Сохранять перенос строк или нет. По умолчанию сохраняется. Если в параметр указать определенные теги, то они НЕ будут вырезаться из обрезанного текста (пример: save_format=<strong><a> )
* echo — выводить на экран или возвращать (return) для обработки.
*
* @param (строка) $args — аргументы в строке.
*
* @return HTML
*/
function kama_excerpt( $args = » ){
global $post;

$default = array( ‘maxchar’ => 350, ‘text’ => », ‘save_format’ => false, ‘more_text’ => ‘Читать дальше…’, ‘echo’ => true, );

parse_str( $args, $_args );
$args = array_merge( $default, $_args );
extract( $args );

if( ! $text ){
$text = $post->post_excerpt ? $post->post_excerpt : $post->post_content;

$text = preg_replace ("~\[/?.*?\]~", », $text ); // убираем шоткоды, например:[singlepic id=3]

// для тега <!—more—>
if( ! $post->post_excerpt && strpos( $post->post_content, ‘<!—more—>’) ){
preg_match (‘~(.*)<!—more—>~s’, $text, $match );
$text = trim( $match[1] );
$text = str_replace("\r", », $text );
$text = preg_replace( "~\n\n+~s", "</p><p>", $text );
$text = ‘<p>’. str_replace( "\n", ‘<br />’, $text ) .’ <a href="’. get_permalink( $post->ID ) .’#more-‘. $post->ID .’">’. $more_text .'</a></p>’;

if( $echo ) return print $text;

return $text;
}
elseif( ! $post->post_excerpt )
$text = strip_tags( $text, $save_format );
}

// Обрезаем
if ( mb_strlen( $text ) > $maxchar ){
$text = mb_substr( $text, 0, $maxchar );
$text = preg_replace(‘@(.*)\s[^\s]*$@s’, ‘\\1 …’, $text ); // убираем последнее слово, оно 99% неполное
}

// Сохраняем переносы строк. Упрощенный аналог wpautop()
if( $save_format ){
$text = str_replace("\r", », $text );
$text = preg_replace("~\n\n+~", "</p><p>", $text );
$text = "<p>". str_replace ("\n", "<br />", trim( $text ) ) ."</p>";
}

//$out = preg_replace(‘@\*[a-z0-9-_]{0,15}\*@’, », $out); // удалить *some_name-1* — фильтр сммайлов

if( $echo ) return print $text;

return $text;
}
[/php]

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

  • Обрезать до определенного количества символов. Указывается в параметре maxchar;
  • Понимает тег в посте. Если он присутствует желаемое количество выводимых символов игнорируется и выводится все что выше с сохранением HTML тегов;
  • Можно указать сохранять переносы строк или писать весь текст в одну строку (по умолчанию переносы сохраняются, если нужен «сплошняк» ставим параметр save_format=0) ;

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

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

Похожие статьи

Оставить заявку
Для экономии вашего времени на все звонки отвечают программисты, а не секретари или офис-менеджеры. Вы сразу получите квалифицированный ответ на большинство технических вопросов. Работаем ежедневно, с 9.00 до 23.00 МСК.

Контактный номер телефона: *

Введите контактный E-mail: *

Как с вами связаться? *


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

Заполнить все поля
Какие услуги вас интересуют?

Прикрепить к ответу коммерческое предложение? *

В каком регионе планируете работать ?

Сколько заявок в месяц вам необходимо получать?

Средний чек за продажу товара/услуги ?

Вкратце опишите свою деятельность и причину обращения:

Представьтесь, пожалуйста:

Бюджет на реализацию

Запрос демо версии
Дорогой клиент, демо версию мы можем бесплатно реализовать для вас в течении 1-2 дней. Уточните детали вашего бизнеса.

Пришлите 1-5 ссылок на сайты вашей тематики которые вам нравятся. Так же можете приложить ссылки на фото(скрншоты)

Представьтесь, пожалуйста: *

Как с вами связаться? *

Контактный номер телефона: *

Введите контактный E-mail: *

Добавить комментарий, если необходимо



Оставить заявку
Для экономии вашего времени на все звонки отвечают программисты, а не секретари или офис-менеджеры. Вы сразу получите квалифицированный ответ на большинство технических вопросов. Работаем ежедневно, с 9.00 до 23.00 МСК.

Контактный номер телефона: *

Введите контактный E-mail: *

Как с вами связаться? *


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

Заполнить все поля
Какие услуги вас интересуют?

Прикрепить к ответу коммерческое предложение? *

В каком регионе планируете работать ?

Сколько заявок в месяц вам необходимо получать?

Средний чек за продажу товара/услуги ?

Вкратце опишите свою деятельность и причину обращения:

Представьтесь, пожалуйста:

Бюджет на реализацию

[contact-form-7 404 "Not Found"]
[contact-form-7 404 "Not Found"]
[contact-form-7 404 "Not Found"]
[contact-form-7 404 "Not Found"]
[contact-form-7 404 "Not Found"]
Запись на бесплатный урок
Введите ваше имя, телефон и e-mail.
Я свяжусь с Вами для уточнения времени прохождения урока.

Как вас зовут *

Как с вами связаться? *

Введите контактный телефон *

Введите контактный E-mail *



[contact-form-7 404 "Not Found"]
Заказать сайт
Первые 14 дней бесплатно. Оставьте номер email и контактный телефон. Я лично перезвоню Вам в течение 10 минут, для обсуждения деталей.


Ваш email

Введите контактный телефон

Комментарий или вопрос

Проблемы с оплатой?
Опишите ситуацию. Когда возникает проблема? Что планируете купить?

Введите ваше имя *

Введите контактный email *

Что необходимо доработать

Скачать чек-лист
Заполните поля ниже. В течение 10 минут на указанный e-mail будет отправлена ссылка на скачивание чек-листа.

Введите ваше имя *

Введите контактный E-mail *

[contact-form-7 404 "Not Found"]
Заказать обратный звонок
Для экономии вашего времени на все звонки отвечают программисты, а не секретари или офис-менеджеры. Вы сразу получите квалифицированный ответ на большинство технических вопросов. Работаем ежедневно, с 9.00 до 23.00 МСК.

Введите ваше имя *

Как с вами связаться? *

Введите контактный телефон *



Степень загрузки
В данном разделе представлена моя занятость в данный момент. Данные обновляются каждый день. Вся работа выполняется по предварительной записи и 20% предоплатой от стоимости проекта.
низкая загрузка. выполняется ~5 заказов. старт работ через 5 дней.
средняя загрузка. выполняется ~15 заказов. старт работ через 20 дней.
высокая загрузка. заказы временно не принимаются.
Задать вопрос
У вас есть вопросы адресованный интернет-маркетологу? А у меня ответы, добро пожаловать! И да, это бесплатно. Я отвечу вам в течение 24 в разделе вопрос-ответ.
[contact-form-7 404 "Not Found"]