WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

the_excerpt() WP 0.71

Выводит "отрывок" (цитату) поста или первые 55 слов контента, со вставкой в конец [...].

Используется внутри Цикла WordPress.

Если "Отрывок" не указан (указывается при создании поста), то функция "создаст" его самостоятельно из первых 55 слов контента. HTML теги, шорткоды и графика при этом будут вырезаны (они не будут учитываться при подсчете слов).

Если "Отрывок" указан, то он будет выведен как есть. Конструкция [...] не добавляется в конец в этом случае.

Если текущая запись является вложением (выводится на странице: attachment.php или image.php), то эта функция выведет текст указанный в поле "описание" (caption) и текст не будет иметь на конце конструкции [...].

Итоговый текст (результат работы функции) пропускается через фильтр the_excerpt, который среди прочего обрабатывает текст функцией wpautop() - оборачивает цитату в тег <p>.

the_excerpt() и the_content()

Эта функция не обрабатывает тег <!--more--> в контенте записи, поэтому иногда лучше использовать the_content().

Работает на основе: get_the_excerpt()
✈ 1 раз = 0.007916с = очень медленно | 50000 раз = 5.61с = быстро | PHP 7.1.2, WP 4.7.3
Хуки из функции
Возвращает

Ничего. Выводит на экран короткий текст.

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

<?php the_excerpt(); ?>

Примеры

#1. Базовое использование

Выведем "Цитату" поста на страницах архивов (категории, метки, авторы, даты):

<?php the_excerpt(); ?>

#2. Использование вместе с условными тегами

Проверим является ли данная страница разделом категории, если да, то заменим the_content() на the_excerpt():

if ( is_category() ) {
	the_excerpt();
}
else {
	the_content();
}

#3. Изменение длины обрезаемого текста

По умолчанию, длина по которому режется текст - это 55 слов, чтобы изменить этот параметр, можно использовать фильтр excerpt_length, для этого поместите такой код в файл темы functions.php:

add_filter( 'excerpt_length', function(){
	return 20;
} );

#4. Удаление конструкции [...] на конце

По умолчанию, если текст обрезается, то в конце добавляется [...], изменить [...] можно через фильтр excerpt_more. Добавим такой код в файл темы functions.php:

add_filter('excerpt_more', function($more) {
	return '...';
});

#5. Создаем ссылку "Читать дальше..." на конце

Опять используем фильтр excerpt_more (для 2.9+). Скопируйте такой код в файл темы functions.php:

add_filter( 'excerpt_more', 'new_excerpt_more' );
function new_excerpt_more( $more ){
	global $post;
	return '<a href="'. get_permalink($post) . '">Читать дальше...</a>';
}

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

С версии 0.71 Введена.

Код the excerpt: wp-includes/post-template.php WP 5.3.2

<?php
function the_excerpt() {

	/**
	 * Filters the displayed post excerpt.
	 *
	 * @since 0.71
	 *
	 * @see get_the_excerpt()
	 *
	 * @param string $post_excerpt The post excerpt.
	 */
	echo apply_filters( 'the_excerpt', get_the_excerpt() );
}

Cвязанные функции

Из метки: excerpt (цитата отрывок фрагмент)

Еще из метки: loop (Цикл WP)

Еще из раздела: Записи: посты, страницы, ...

Еще из тегов шаблона: Записи: посты, страницы, ...

37 комментов
Полезные 2 Вопросы 2 Все
  • Слава

    Здравствуйте!

    Можно как-нибудь проверить поле "Цитата" на пустоту при публикации поста? Мне нужно сделать вот что. В некоторых постах, непосредственно перед самой статьёй нужно выводить краткое описание с миниатюкрой обрамлённое в div. Это хочу делать как раз через поле цитата. А дальше сама статья.

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

    Вот мой воспалённый мозг думал думал и вот что придумал.

    <?php $key_1_values = get_post_meta($post->ID, 'key_1', true);
    	// Если нужно, то выведу цитату в статье с миниатюрой. Поле key_1 поставить значение 1
    	// если не заполнить поле key_1 то выводиться просто статья без цитаты. ?>
    			<?php if ( $key_1_values == 1) {
    				echo '<div id="the_excerpt">';
    				echo '<div id="the_excerpt-img">';
    				echo get_the_post_thumbnail( $id, full);
    				echo '</div>';
    				echo '<div id="the_excerpt_info">';
    					the_time('j:m:Y'); 
    				echo '    Просмотров: ' . get_post_meta ($post->ID,'views',true);
    				echo '</div>';
    					the_excerpt();
    				echo '</div>';
    			}?>
    
    		   <?php the_content(); ?>

    Если мне нужно вывести описание то придётся в поле key_1 ставить 1 и заполнять поле "Цитата". На что-то более умное и адекватное мозга не хватает.

    Может быть подскажите что-нибудь? А там глядишь и может и функцию напишу laugh

    1
    Ответить21.Янв.2015 в 23:09 #
  • Иван3 resweb.ru

    Здравствуйте.
    У меня не меняется кол-во слов в цитате.
    Вернее меняется, но только если в цитате пусто, то вместо нее выводится текст из поста, вот этот текст он режет на указанное кол-во слов.
    А если в цитату прописать текст, то его не режет, выводится весь текст цитаты.
    В чем трабла?

    2
    Ответить24.Мар.2015 в 18:16 #
  • Дмитрий dimakrutoo.ru

    Привет. У меня WP 4.4 и фильтр excerpt_more не работает. Пишет

    Parse error: syntax error, unexpected T_FUNCTION
    Ответить25.Янв.2016 в 22:02 #
    • Kama7609

      Версия PHP какая?

      Для PHP 5.2+ вместо

      add_filter('excerpt_more', function($more) {
      	return '...';
      });

      Надо так:

      add_filter('excerpt_more', 'my_func');
      function my_func($more) {
      	return '...';
      }
      1
      Ответить26.Янв.2016 в 01:06 #
      • Дмитрий dimakrutoo.ru

        спасибо заработало, PHP 5.2. Этот вариант будет работать во всех версиях PHP?

        Ответить30.Янв.2016 в 20:25 #
  • avense6 videovegas.ru

    Почему то данная функция выводит лишние тексты:

    <?php the_excerpt(); ?>

    В итоге выводить: Текст контента далее название сайта, далее USA и email админки сайта.
    Как этот текст может добавляться и в чем причина?
    Функция the_content() выводит текст нормально, а вот the_excerpt() почему то добавляет указанные текст.

    Ответить29.Июн.2016 в 12:52 #
    • Kama7609

      Может добавляться через фильтр the_excerpt. Попробуйте альтернативу

      echo get_the_excerpt()
      1
      Ответить29.Июн.2016 в 17:15 #
  • Painkiller

    Добрый. Приходится использовать вкладку "Отрывок" для анонсов.

    Как регулировать в ней количество слов/строк/символов?

    Всеми методами, которые я знаю - не удалось...

    Ответить30.Окт.2017 в 13:18 #
    • newbie33 yumchief.com

      Собственно если ты используешь блок "Отрывок" в админке и заполняешь его вручную, то ты и регулируешь количество слов/строк/символов вручную, или я что-то не так понимаю?

      1
      Ответить31.Мар.2018 в 03:07 #
  • Добрый день! а как вообще отбить у него охоту обрезать теги? ситуация что нужно форматирование , а он все удаляет... И нужно это для всего сайта, допустим другой плагин тоже вытягивает excerpt и очень нужно вернуть все теги с классами....

    Ответить23.Фев.2018 в 12:11 #
  • EX

    Добрый день, у меня тема "Iconic One", вывод "Читать далее..." выводится с помощью кода ниже в файле functions.php

        if( !function_exists( 'io_excerpt_more' ) ) :
    		function io_excerpt_more($more) {
    		global $post;
    		return '… <span class="read-more"><a href="'. get_permalink($post->ID) . '">' . __( 'Read More', 'iconic-one' ) . '...</a></span>';
    		}
    		add_filter('excerpt_more', 'io_excerpt_more');
    	 endif; //io_excerpt_more

    Но если статья маленькая то "Читать далее..." отсутствует, как принудительно независимо от длины статьи выводить ее? Спасибо.

    Ответить26.Сен.2018 в 20:14 #
  • Почему может странно работать get_the_excerpt()? Задача в том, чтобы выводить случайные куски записей (поле отрывок не заполняю).

    <?php 
    	$random_post = get_posts('orderby=rand&numberposts=1');
    	$random_post = array_shift( $random_post );
    	$link = get_permalink( $random_post );
    	$title = get_the_title( $random_post );
    	$excerpt_load_more = get_the_excerpt( $random_post );
    ?>
    
    <h4>
    <a href="<?php echo $link; ?>" ><?php echo $title; ?></a>
    </h4>
    <p class="entry-meta"><?php echo $excerpt_load_more; ?></p>
    

    Вроде бы вычленяет $random_post, поскольку $title и $link правильно (случайно) определяются, а вот $excerpt_load_more выводит по дате, от последних к первым. Причем пробовал the_excerpt, the_content и даже вручную проставлял get_the_excerpt(123)

    1
    Ответить13.Янв.2019 в 00:49 #
  • Олег wp-oleg.in.ua

    Уважаемые пользователи WordPress. Подскажите как можно добиться того чтобы выводились анонсы статей, которые выделены тегом more. Я так понял функция the_excerpt игнорирует абзац выделенный вручную тегом Читать далее и обрезает по своему как есть в настройках темы по 55 слов. Can you help me please? SOS!!!

    Ответить15.Июн.2019 в 22:02 #