WordPress как на ладони
wordpress jino

the_excerpt() WP 0.71

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

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

the_excerpt() нужно использовать внутри Цикла WordPress.

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

the_excerpt() и the_content()

Иногда лучше использовать the_content(), потому что она понимает тег <!--more-->, указанный в контенте записи и выводит то, что выше этого тега.

Работает на основе: 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:

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

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

Для версий 2.9+ (2.9 или выше)!
По умолчанию, если текст обрезается, то в конце добавляется [...], изменить [...] можно через фильтр 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->ID) . '">Читать дальше......</a>';
}

Заметки

  • Использует: get_the_excerpt();

  • Использует фильтр the_excerpt;

  • C версии 2.9 использует фильтр excerpt_more.

Код the excerpt: wp-includes/post-template.php WP 4.8.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)

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

the_excerpt 32 комментария
Полезные 1 Вопросы 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
    Ответить2.6 года назад #
  • Иван cайт: resweb.ru @

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

    1
    Ответить2.5 года назад #
  • Дмитрий cайт: dimakrutoo.ru

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

    Parse error: syntax error, unexpected T_FUNCTION
    Ответить1.6 года назад #
    • Kama4464

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

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

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

      Надо так:

      add_filter('excerpt_more', 'my_func');
      function my_func($more) {
      	return '...';
      }
      1
      Ответить1.6 года назад #
      • Дмитрий cайт: dimakrutoo.ru

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

        Ответить1.6 года назад #
  • avense5 cайт: videovegas.ru

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

    <?php the_excerpt(); ?>

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

    Ответить1.2 года назад #
    • Kama4464

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

      echo get_the_excerpt()
      1
      Ответить1.2 года назад #
  • PH cайт: poweredhouse.ru @

    Вопрос в следующем: в записях сверху используется меню-содержание(#) статьи в <div>ах:

    <div style="float: left; margin: 3px; padding: 3px; text-transform: uppercase; box-shadow: 0 8px 10px -5px #aaa; background: #33b5e5; color: #fff; font-weight: normal;"><a style="color: #fff;" href="#1">Основные характеристики стеклохолста</a></div>

    Анонс на главной выводиться через:

    <?php echo mts_excerpt(45);?>

    Функция:

    function mts_excerpt($limit) {
      $excerpt = explode(' ', get_the_excerpt(), $limit);
      if (count($excerpt)>=$limit) {
    	array_pop($excerpt);
    	$excerpt = implode(" ",$excerpt);
      } else {
    	$excerpt = implode(" ",$excerpt);
      }
      $excerpt = preg_replace('`[[^]]*]`','',$excerpt);
      return $excerpt;
    }
    

    Как сделать, чтобы данное меню статьи не выводилось в анонсе?

    Ответитьгод назад #
    • PH cайт: poweredhouse.ru @

      Решено с использованием уникального анонса - цитаты

      Ответитьгод назад #
  • Вокс cайт: blogalt.ru

    Добрый день!

    А есть ли возможность заносить в excerpt текст из определенного блока div (у div имеется свой class).

    Ответить2 месяца назад #
  • Павел @

    Вставил код для замены [...] на нужный мне фразу Читать далее. Почему-то ссылка прописалась не только Читать далее, но и отдельно самой цитате, картинке, а также появились откуда-то пустые абзацы и им тоже прописалась ссылка!

    Ответить2 месяца назад #

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

Ваш комментарий