wp_trim_excerpt()WP 1.5.0

Создает цитату из контента поста, когда цитата (отрывок) не указана. Используется внутри Цикла WordPress.

По умолчанию текст обрезается до 55 слов и в конце добавляется "[…]". Если переданный текст содержит меньше 55 слов, то он будет возвращен без изменений.

Ограничение в 55 слов может быть изменено в плагинах и темах, через фильтр excerpt_length, а конструкция в конце цитаты "[…]", может быть заменена через фильтр excerpt_more.

Если параметр $text не передан (пустой), то функция получит контент текущей записи (возьмет его начальный кусок).

Работает на основе: wp_trim_words()

Возвращает

Строку. Обрезанную строку.

Использование

wp_trim_excerpt( $text );
$text(cтрока)
Цитата. Если указать пустое значение, то функция получит контент текущего поста и сгенерирует цитату. Если указать текст, то функцию не обрежет его, а вернет как есть.
По умолчанию: ''

Примеры

0

#1 Демонстрация работы

Допустим у нас для постов предусмотрены отдельные цитаты и нам нужно проверить, если такая цитата у поста есть, то нужно вывести её, а если её нет, то нужно вывести обрезанный текст текущего поста:

$excerpt = get_post_meta($post->ID, 'special_excerpt', 1);
$text = wp_trim_excerpt( $excerpt );
echo $text;
0

#2 Вывод короткого текста (выдержки) для поста

Если у нас уже есть выдержка, и мы просто хотим обрезать ее:

echo "Here is short info about post: \n" . wp_trim_excerpt( $excerpt );

Если готовой выдержки нет, то можно передать ИД поста, тогда функция создаст её из контента:

echo "Here is short info about post: \n" . wp_trim_excerpt( '', $post_id );

Список изменений

С версии 1.5.0 Введена.
С версии 5.2.0 Added the $post parameter.
С версии 6.3.0 Removes footnotes markup from the excerpt content.

Код wp_trim_excerpt() WP 6.4.3

function wp_trim_excerpt( $text = '', $post = null ) {
	$raw_excerpt = $text;

	if ( '' === trim( $text ) ) {
		$post = get_post( $post );
		$text = get_the_content( '', false, $post );

		$text = strip_shortcodes( $text );
		$text = excerpt_remove_blocks( $text );
		$text = excerpt_remove_footnotes( $text );

		/*
		 * Temporarily unhook wp_filter_content_tags() since any tags
		 * within the excerpt are stripped out. Modifying the tags here
		 * is wasteful and can lead to bugs in the image counting logic.
		 */
		$filter_image_removed = remove_filter( 'the_content', 'wp_filter_content_tags', 12 );

		/*
		 * Temporarily unhook do_blocks() since excerpt_remove_blocks( $text )
		 * handles block rendering needed for excerpt.
		 */
		$filter_block_removed = remove_filter( 'the_content', 'do_blocks', 9 );

		/** This filter is documented in wp-includes/post-template.php */
		$text = apply_filters( 'the_content', $text );
		$text = str_replace( ']]>', ']]>', $text );

		// Restore the original filter if removed.
		if ( $filter_block_removed ) {
			add_filter( 'the_content', 'do_blocks', 9 );
		}

		/*
		 * Only restore the filter callback if it was removed above. The logic
		 * to unhook and restore only applies on the default priority of 10,
		 * which is generally used for the filter callback in WordPress core.
		 */
		if ( $filter_image_removed ) {
			add_filter( 'the_content', 'wp_filter_content_tags', 12 );
		}

		/* translators: Maximum number of words used in a post excerpt. */
		$excerpt_length = (int) _x( '55', 'excerpt_length' );

		/**
		 * Filters the maximum number of words in a post excerpt.
		 *
		 * @since 2.7.0
		 *
		 * @param int $number The maximum number of words. Default 55.
		 */
		$excerpt_length = (int) apply_filters( 'excerpt_length', $excerpt_length );

		/**
		 * Filters the string in the "more" link displayed after a trimmed excerpt.
		 *
		 * @since 2.9.0
		 *
		 * @param string $more_string The string shown within the more link.
		 */
		$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
		$text         = wp_trim_words( $text, $excerpt_length, $excerpt_more );

	}

	/**
	 * Filters the trimmed excerpt string.
	 *
	 * @since 2.8.0
	 *
	 * @param string $text        The trimmed text.
	 * @param string $raw_excerpt The text prior to trimming.
	 */
	return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt );
}