Обрезать текст в поиске и статьях но оставить (читать далее) wordpress

Бывает так что нужно обрезать текст в привьюшках но нужно чтобы осталась и кнопка “читать далее”. Как это сделать описано далее.

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

Так во чтобы сократить текст или отобразить описание статьи или страницы нужно всего лиш вставить в functions.php вашей темы следующий хук.

/**
 начало хука
 */function kama_excerpt( $args = '' ){
 global $post;

 if( is_string($args) )
  parse_str( $args, $args );

 $rg = (object) array_merge( array(
  'maxchar'     => 350,   // Макс. количество символов которые будут выводится.
  'text'        => '',    // Какой текст обрезать (по умолчанию post_excerpt, если нет post_content.
)
        // Если в тексте есть `<!--more-->`, то `maxchar` игнорируется и берется
        // все до <!--more--> вместе с HTML.
  'autop'       => true,  // Заменить переносы строк на <p> и <br> или нет?
  'save_tags'   => '',    // Теги, которые нужно оставить в тексте, например '<strong><b><a>'.
  'more_text'   => 'Читать дальше...', // Текст кнопки `Читать дальше`.
  'ignore_more' => false, // нужно ли игнорировать <!--more--> в контенте
 ), $args );

 $rg = apply_filters( 'kama_excerpt_args', $rg );

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

 $text = $rg->text;
 // убираем блочные шорткоды: [foo]some data[/foo]. Учитывает markdown
 $text = preg_replace( '~[([a-z0-9_-]+)[^]]*](?!().*?[/1]~is', '', $text );
 // убираем шоткоды: [singlepic id=3]. Учитывает markdown
 $text = preg_replace( '~[/?[^]]*](?!()~', '', $text );
 $text = trim( $text );

 // <!--more-->
 if( ! $rg->ignore_more  &&  strpos( $text, '<!--more-->') ){
  preg_match('/(.*)<!--more-->/s', $text, $mm );

  $text = trim( $mm[1] );

  $text_append = ' <a href="'. get_permalink( $post ) .'#more-'. $post->ID .'">'. $rg->more_text .'</a>';
 }
 // text, excerpt, content
 else {
  $text = trim( strip_tags($text, $rg->save_tags) );

  // Обрезаем
  if( mb_strlen($text) > $rg->maxchar ){
   $text = mb_substr( $text, 0, $rg->maxchar );
   $text = preg_replace( '~(.*)s[^s]*$~s', '1...', $text ); // кил последнее слово, оно 99% неполное
  }
 }

 // сохраняем переносы строк. Упрощенный аналог wpautop()
 if( $rg->autop ){
  $text = preg_replace(
   array("/r/", "/n{2,}/", "/n/",   '~</p><br ?/?>~'),
   array('',     '</p><p>',  '<br />', '</p>'),
   $text
  );
 }

 $text = apply_filters( 'kama_excerpt', $text, $rg );

 if( isset($text_append) )
  $text .= $text_append;

 return ( $rg->autop && $text ) ? "<p>$text</p>" : $text;
}
/* Конец хука*/

Как работает Хук

  1. Обрезка до количества необходимых символов. Указывается в параметре maxchar.

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

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

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

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

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

Поделиться
Опубликовано
Богдан Кошелев

Недавние Посты

Аттестация ИСПДн как гарант безопасности персональных данных

В эпоху стремительного развития цифровых технологий и массовой цифровизации общества, безопасность персональных данных становится вопросом…

% дней назад

Что нужно знать о создании интернет-магазина

В современном быстро меняющемся мире онлайн-торговли создание собственного интернет-магазина становится необходимостью для предпринимателей всех уровней.…

% дней назад

Работа на биржах копирайтинга

В современном мире, на фоне активного развития технологий и роста удаленной работы, все больше людей…

% дней назад

SMS-рассылки — мощный инструмент для бизнеса

SMS-рассылки стали одним из наиболее эффективных способов связи и маркетинга в современном мире. С каждым…

% дней назад

Интернациональный SEO или как продвигать сайты за границей

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

% дней назад

Для каких целей покупают каналы в Telegram?

В постоянно меняющемся ландшафте социальных сетей и платформ обмена сообщениями Telegram превратился в мощного игрока,…

% дней назад