WordPress: Улучшаем функцию the_excerpt()

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

Первое, что необходимо сделать, это создать функцию. Открываем файл functions.php в папке вашей текущей темы и вставляем следующий код:

// Переменные и умная длина цитаты.
function print_excerpt($length) { // Максимальная длина цитаты. Длина задается в символах
	global $post;
	$text = $post->post_excerpt;
	if ( '' == $text ) {
		$text = get_the_content('');
		$text = apply_filters('the_content', $text);
		$text = str_replace(']]>', ']]>', $text);
	}
	$text = strip_shortcodes($text); // опционально, рекомендуется
	$text = strip_tags($text); // используйте' $text = strip_tags($text,'<p><a>'); ' если хотите оставить некоторые теги

	$text = substr($text,0,$length);
	$excerpt = reverse_strrchr($text, '.', 1);
	if( $excerpt ) {
		echo apply_filters('the_excerpt',$excerpt);
	} else {
		echo apply_filters('the_excerpt',$text);
	}
}

function reverse_strrchr($haystack, $needle, $trail) {
    return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) + $trail) : false;
}

Теперь можно использовать функцию print_excerpt() в файлах вашей темы, задавая длину цитаты; пример ниже:

<?php print_excerpt(50); ?>
VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Юрий

    Как заставить этот код отображать ссылку на пост через далее или читать далее?

  • Евгений Перин

    Привет! А не знаешь как сделать условие, если «цитата» у записи есть, то вывести её, если «цитаты» нет, то не выводить !ничего (а то выводит обрезанный контент)?

  • Андрей

    Спасибо за подробное разъяснение. Все получилось.

    • ADv

      😉

  • Антон

    Спасибо за информацию, а можно ограничить не по количеству знаков, а на пример, по первой строке?

  • Никита

    Спасибо огромное, то что надо)

Scroll To Top