Описание
Выводит отрывок (цитату) поста, со вставкой в конец [...] (но это не ссылка на прочтение полного материала).
Если поле "Цитата" не указано для поста (указывается при публикации), то функция "создаст" цитату самостоятельно, путем обрезки начальной части контента поста (будут взяты первые 55 слов контента). HTML теги или графика, будут предварительно вырезаны, поэтому они не будут выводится и учитываться при подсчете.
the_excerpt() нужно использовать внутри Цикла WordPress.
Заметка: Если текущая запись является вложением (обычно выводится в цикла файлов шаблона: attachment.php и image.php), то the_excerpt() выведет текст указанный в поле "описание" (Caption) и текст не будет иметь на конце конструкции [...].
Сравнение the_excerpt() и the_content()
Иногда лучше использовать только функцию the_content(), потому что the_content() понимает тег <!--more-->, указанный в контенте записи и выводит только то, что выше <!--more--> (конечно, кроме отдельных страниц: single.php, page.php).
the_excerpt() работает на базе get_the_excerpt().
Функция возвращает отформатированный текст.
Использование
<?php the_excerpt(); ?>
Примеры
1. Базовое использование.
Выведем "Цитату" поста на страницах архивов (категории, метки, авторы, даты):
<?php the_excerpt(); ?>
2. Использование вместе с условными тегами.
Проверим является ли данная страница разделом категории, если да, то заменим the_content() на the_excerpt():
<?php 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:
function new_excerpt_more($more) {
return '...';
}
add_filter('excerpt_more', 'new_excerpt_more');
Для версий ниже -2.9 (ниже 2.9)!
Фильтр excerpt_more, был добавлен в версии 2.9, поэтому для ранних версий [...] изменяется так:
function new_excerpt_more($excerpt) {
return str_replace('[...]', '...', $excerpt);
}
add_filter('wp_trim_excerpt', 'new_excerpt_more');
Здесь мы меняем [...] на ...
5. Создаем ссылку "Читать дальше..." на конце.
Опять используем фильтр excerpt_more (для 2.9+). Скопируйте такой код в файл темы functions.php:
function new_excerpt_more($more) {
global $post;
return '<a href="'. get_permalink($post->ID) . '">Читать дальше......</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');
На заметку
- Использует: get_the_excerpt();
- Использует фильтр the_excerpt;
- C версии 2.9 использует фильтр excerpt_more.
the_excerpt()
из файла: /wp-includes/post-template.php WP 3.3.2function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
Здравствуйте!
Если изменению длины анонса "мешает" плагин (который тоже нужен на сайте), в котором тоже устанавливается своя длина анонса, то можно ли все-таки (не удаляя плагина) изменить excerpt_length?
Да, выставите приоритет для вашего фильтра выше чем он у фильтра плагина: делается это в третьем параметре функции add_filter():
add_filter('excerpt_length', 'new_excerpt_length', 99999);Еще одно решение — это выключить фильтр плагина функцией remove_filter(), но выключать нужно после того как плагин добавит этот фильтр (например, где-нить в шаблоне можно или через хук wp_head).
Да, спасибо. Добавлением приоритета не получилось, наверное потому, что в плагине использовался другой фильтр
remove_filter('get_the_excerpt', 'wp_trim_excerpt');Вернула родной get_the_excerpt;, а потом к нему уже добавила фильтр для excerpt_length.
применение фильтра
<?php if ( is_category() ) { the_excerpt(); } else { the_content(); } ?>Хорошо обрезает текст поста, но если задана цитата ее не обрезает
Можно ли заставить этот фильтр обрезать цитату ?
А у меня такой случай. У меня и в слайдере и в обычных новостях используется для обрезания the_except();. Как мне для слайдера убрать ссылку "далее", что бы не затронуть обычные статьи, где эта ссылка нужна? И можно ли создать вторую функцию the_except2();, к примеру, но туда вставить уже нужные мне аргументы для слайдера?
В сайдбаре используйте другую функцию обрезки, например мою: kama_excerpt
Kama, спасибо, то что надо. Очень выручили.
К сведению: делал тему на базе TwentyTen и столкнулся с такой ситуацией:
-сделал цикл loop-category для вывода постов категорий и подключил его в category.php
-тот же цикл использовал в шаблоне статичной страницы, которую поставил главной, но для этой страницы сделал свой запрос для конкретной категории.
-в цикле использовал the_excerpt()
И получил смешной результат - на главной странице the_excerpt() не видит тэга more и обрезает текст поста по длине, а в категории - видит и обрезает текст по нему. Видимо, есть какой-то нюанс, связанный либо с ID поста, либо с query_posts
А как вывести цитаты из определенной рубрики?