Ограничение количества слов в post_content после тега more

25 февр. 2015 г., 08:55:34
Просмотры: 21.8K
Голосов: 3

Я использую следующий код, чтобы скрыть тизер и показать содержимое только после тега 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.

0
Все ответы на вопрос 2
7

Используйте функцию 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-->.

25 февр. 2015 г. 09:10:18
Комментарии

Это замечательно. :)

Robert hue Robert hue
25 февр. 2015 г. 09:32:41

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

birgire birgire
25 февр. 2015 г. 11:23:35

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

Robert hue Robert hue
25 февр. 2015 г. 11:36:31

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

Skotlive Skotlive
26 февр. 2015 г. 16:23:25

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

Skotlive Skotlive
26 февр. 2015 г. 16:35:16

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

Robert hue Robert hue
26 февр. 2015 г. 21:26:05

@Roberthue , Спасибо, это сработало и было очень полезно.

Skotlive Skotlive
3 мар. 2015 г. 15:31:59
Показать остальные 2 комментариев
0

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...
25 февр. 2015 г. 12:00:00