Как создавать и настраивать выдержки WordPress
Опубликовано: 2020-04-16Выдержка — это необязательный текст, связанный с постом. В большинстве случаев он используется в качестве резюме поста. Если вы используете новый редактор, вы увидите, что на боковой панели есть опция Excerpt :

Если он не отображается, возможно, вам придется включить этот параметр в настройках Гутенберга. Нажмите на значок с многоточием в правом верхнем углу редактора, а затем выберите « Параметры »:

Затем найдите Excerpt и включите его:

В зависимости от того, как настроена ваша тема, выдержка будет отображаться при просмотре ваших сообщений в блоге, результатах поиска и т. д. Например, в нашем блоге вы можете увидеть, как все наши сообщения представлены с соответствующими выдержками:

Всегда ли обязательно писать этот отрывок? Если нет, что делает WordPress? Он что-то показывает или вообще ничего? Что ж, мы собираемся ответить на эти вопросы и более подробно рассмотрим параметры, которые WordPress предоставляет нам для настройки выдержек.
Как работают выдержки WordPress
В WordPress есть две функции для получения выдержки из поста: get_the_excerpt и the_excerpt . Оба определены в wp-includes/post-template.php , и если вы посмотрите на их исходный код, вы обнаружите, что все, что делает the_excerpt , — это echo -результат get_the_excerpt (после фильтрации с помощью the_excerpt ). Итак, по сути, мы можем грубо сказать, что единственное, что вам нужно понять, чтобы знать, как работают выдержки в WordPress, — это функция get_the_excerpt .
Как видите, get_the_excerpt предельно прост:
function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); } По сути, он загружает сообщение (если вы его не установили, оно использует сообщение, доступное в цикле WordPress) и возвращает его атрибут post_excerpt . Таким образом, кажется, что отсутствие выдержки означает, что WordPress ничего не покажет в конце, верно?
Не так быстро, приятель.
Обратите внимание, что эта функция на самом деле не возвращает значение post_excerpt напрямую. Вместо этого он фильтрует его с помощью нового фильтра: get_the_excerpt. Поэтому, если есть какие-либо действия, связанные с этим фильтром, конечный результат потенциально может измениться и больше не будет пустой строкой…
И действительно, вот что здесь происходит! Если мы не напишем отрывок для данного поста, вот что мы увидим во фронтенде:

первыми словами нашего поста будет отрывок, который генерирует WordPress.
Функция wp_trim_excerpt
Если мы выполним быстрый поиск в исходном коде WordPress, мы увидим, что по умолчанию есть только одно действие, связанное с фильтром get_the_excerpt . В частности, в wp-includes/default-filters.php мы видим, что функция с именем wp_trim_excerpt .
Согласно документам WordPress, wp_trim_excerpt отвечает за создание выдержки с максимальным количеством слов 55 и многоточием, добавленным при необходимости. И вот ключ: функция считает, что генерировать отрывок «нужно», если его еще нет (что, в общем-то, равносильно тому, что пользователь не писал отрывок в редакторе). Вы можете увидеть это в исходном коде функции:
function wp_trim_excerpt( $text = '', $post = null ) { $raw_excerpt = $text; if ( '' == $text ) { $post = get_post( $post ); $text = get_the_content( '', false, $post ); // [...] » Generates the excerpt using the post content } return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); } Видеть? Если выдержки нет ( $text — пустая строка), то извлеките содержимое текущей записи ( get_the_content from $post ) и используйте ее для создания выдержки.

С этого момента вы можете продолжать копать и узнавать, как WordPress на самом деле генерирует исходный код. Однако я думаю, что вы уже уловили идею, так что давайте еще раз взглянем на документацию, поскольку она проливает свет на эту тему:
Возвращает не более 55 слов с добавлением многоточия, если это необходимо. Ограничение в 55 слов может быть изменено плагинами/темами с помощью фильтра
excerpt_length. Строка « […]» может быть изменена плагинами/темами с помощью фильтраexcerpt_more.wp_trim_excerptДокументация
Итак, теперь вы знаете все, что нужно знать, чтобы полностью настроить автоматические выдержки, которые WordPress генерирует для ваших сообщений.
Как настроить автоматические выдержки
Давайте рассмотрим несколько примеров того, как мы можем использовать фильтры, которые мы видели в сегодняшней публикации, для настройки автоматических выдержек. Кстати, помните, что для того, чтобы добавить любую из этих модификаций на свой сайт, вам, вероятно, потребуется создать плагин.
а) Как изменить количество слов, которые я хочу в своих отрывках
Это один из самых простых. Мы уже видели, что в нашем распоряжении есть фильтр excerpt_length , чтобы выбрать, сколько слов мы хотим использовать в наших отрывках, так что давайте воспользуемся им:
function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 ); Обратите внимание, что первое, что мы делаем в нашей функции, — убеждаемся, что мы находимся во внешнем интерфейсе. Если мы находимся на Dashboard ( is_admin ), то лучше ничего не делать с нашими выдержками. Как только мы убедимся, что находимся в «безопасной среде», нам просто нужно вернуть наш магический номер. В моем случае: 100 слов.
б) Как изменить текст, который появляется после автоматического извлечения
Это также очень просто, потому что мы уже видели, что для него есть фильтр:
function nelio_clickable_read_more( $more ) { if ( is_admin() ) { return $more; } return sprintf( '<a href="%s">Tell me more!</a>', esc_url( get_the_permalink() ) ); } add_filter( 'excerpt_more', 'nelio_clickable_read_more', 99 );В этом случае все, что мы делаем, это возвращаем текст «Расскажите еще!» после резюме и сделайте его ссылкой, чтобы пользователи могли щелкнуть по нему.
в) Как ограничить длину выдержки определенным количеством символов
Функция wp_trim_words имеет фильтр с тем же именем, который мы можем использовать для изменения финальной выдержки, которую использует WordPress. Итак, давайте использовать его:
function nelio_140_char_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } return mb_substr( $excerpt, 0, 140 ); } add_filter( 'wp_trim_excerpt', 'nelio_140_char_excerpts', 99, 2 ); Фильтр wp_trim_words применяется как к автоматическим, так и к пользовательским выдержкам. В моем примере меня интересует только изменение выдержек, которые были сгенерированы автоматически, поэтому мне нужно добавить новое условие. Если вы помните, wp_trim_words генерирует автоматический отрывок только в том случае, если исходный отрывок был пустым, поэтому все, что вам нужно сделать, это проверить это, чтобы получить желаемый результат.
С другой стороны, обратите внимание, что я использовал mb_substr вместо классической функции substr . Если вам интересно, почему, причина проста: если вы пишете в своем блоге на языке, отличном от английского, вы, вероятно, будете использовать многобайтовые символы, а сокращение многобайтовых строк с помощью substr может пойти не так. Прочтите документацию PHP для получения дополнительной информации об этом.
г) Как создавать выдержки с первым абзацем содержания
И, наконец, пример того, как создать отрывок, используя ровно первый абзац вашего поста. На этот раз никаких объяснений, поэтому обратите внимание на то, что я делаю:
function nelio_first_paragraph_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } $content = apply_filters( 'the_content', get_the_content() ); return substr( $content, 0, strpos( $content, '</p>' ) + 4 ); } add_filter( 'wp_trim_excerpt', 'nelio_first_paragraph_excerpts', 99, 2 );Вкратце…
Великая сила WordPress заключается в его расширяемости. Сегодня мы подробно рассмотрели, как WordPress генерирует выдержки из постов, а также все фильтры и функции, которые он предлагает для настройки конечного результата в соответствии с вашими потребностями.
Надеюсь, вам понравился сегодняшний пост. Поделитесь ею с друзьями, чтобы больше людей узнали о преимуществах WordPress!
Избранное изображение Аарона Бёрдена на Unsplash.
