Up-sait.ru

Создание и продвижение сайтов

Up-sait.ru

Создание и продвижение сайтов

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

wp cod

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

Я сам сталкивался с подобным. Бывает что либо не сделал тег читать далее, или был перенос сайта, и страниц слишком много чтобы их переделывать, а в блоге либо в поиске сайта 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.
)
								// Если в тексте есть `
`, то `maxchar` игнорируется и берется // все до вместе с HTML. 'autop' => true, // Заменить переносы строк на <p> и <br> или нет? 'save_tags' => '', // Теги, которые нужно оставить в тексте, например '<strong><b><a>'. 'more_text' => 'Читать дальше...', // Текст кнопки `Читать дальше`. 'ignore_more' => false, // нужно ли игнорировать в контенте ), $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 ); // if( ! $rg->ignore_more && strpos( $text, '') ){ preg_match('/(.*)/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.

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

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

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

Вас также может заинтересовать:
Добавить комментарий

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