Ограничение количества слов в post_content после тега more
Я использую следующий код, чтобы скрыть тизер и показать содержимое только после тега more в цикле:
<?php
// Разделяем содержимое по тегу more
$after_more = explode(
'<!--more-->',
$post->post_content
);
if( $after_more[1] ) {
echo $after_more[1];
} else {
echo $after_more[0];
}
?>
Есть ли способ показать только первые 50 слов вместо всего содержимого поста? Я хочу скрыть тизер и показать 50 слов после тега more.

Используйте функцию wp_trim_words
для ограничения контента определенным количеством слов и возврата обрезанного текста. Пример использования функции wp_trim_words
.
<?php
$content = get_the_content();
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Я добавил функцию wp_trim_words
в ваш код, чтобы получить 50 слов после тега <!-- more -->
.
<?php
$after_more = explode( '<!--more-->', $post->post_content );
if( $after_more[1] ) {
$content = $after_more[1];
} else {
$content = get_the_content();
}
$trimmed_content = wp_trim_words( $content, 50, NULL );
echo $trimmed_content;
?>
Изменено для отображения 50 слов из контента, если в посте нет тега <!--more-->
.

Мы также можем использовать основную функцию get_extended()
для обработки более общего случая: <!--more(.*?)?-->
. Например: <!--more Но подождите, это еще не все! -->
.

@birgire никогда раньше не видел эту функцию. Я изучу её. :) Спасибо

Привет, Роберт, хотел узнать, что будет, если в записи нет тега <!--more-->. Я вижу, что весь контент скрывается.

Я хотел сказать, есть ли способ использовать оба приведенных выше кода, как ты написал в таксономии, внутри условного тега if else: если в записи есть тег <!--more-->, использовать второй вариант, а если нет - первый вариант.

@SureshSoni Я внес изменения в код. Используй обновленный код и дай мне знать, работает ли он так, как тебе нужно.

A) Комментарий <!--more-->
:
Вот однострочное решение:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', true ) ) ), 50 );
где мы используем второй аргумент get_the_content()
чтобы скрыть тизер перед частью <!--more-->
в содержимом записи.
B) Комментарий <!--noteaser-->
:
Обратите внимание, что существует комментарий <!--noteaser-->
, который мы можем использовать для контроля отображения тизера прямо из содержимого записи:
....
<!--more--><!--noteaser-->
...
В этом случае мы будем использовать:
echo wp_trim_words( strip_shortcodes( strip_tags( get_the_content( '', false ) ) ), 50 );
При необходимости мы также можем применить дополнительные фильтры к этому выводу.
Для этого случая также можно использовать:
echo wp_trim_excerpt();
и затем контролировать вывод с помощью фильтров excerpt_length
, excerpt_more
, the_content
и wp_trim_excerpt
.
Пример с Lorem Ipsum из Star Trek:
Для случая A выше:
До:
Exceeding reaction chamber thermal limit.
We have begun power-supply calibration.
<!--more-->
Force fields have been established on all turbo lifts and crawlways.
Computer, run a level-two diagnostic on warp-drive systems.
Antimatter containment positive.
Warp drive within normal parameters.
I read an ion trail characteristic of a freighter escape pod.
The bomb had a molecular-decay detonator.
Detecting some unusual fluctuations in subspace frequencies.
Sensors indicate no shuttle or other ships in this sector.
According to coordinates, we have travelled 7,000 light years
and are located near the system J-25.
Tractor beam released, sir.
Force field maintaining our hull integrity.
После:
Force fields have been established on all turbo lifts and crawlways.
Computer, run a level-two diagnostic on warp-drive systems.
Antimatter containment positive.
Warp drive within normal parameters.
I read an ion trail characteristic of a freighter escape pod.
The bomb had a molecular-decay detonator.
Detecting some unusual fluctuations in subspace...
