Получить анонс из $post->post_content

26 мая 2017 г., 03:51:11
Просмотры: 16.4K
Голосов: 5

Я изменяю вывод плагина с помощью фильтра, и у меня доступна переменная $post, поэтому я могу отобразить содержимое поста следующим образом:

<h3><?php echo $post->post_title; ?></h3>
<?php echo apply_filters( 'the_excerpt', $post->post_excerpt ); ?>

Однако приведенный выше код отображает анонс только если он был вручную введен в поле "Анонс". Он не показывает усеченную версию содержимого, как это было бы при использовании "the_excerpt" или "get_the_excerpt". Я также пробовал:

<?php echo apply_filters( 'the_excerpt', $post->post_content ); ?>

Но это просто выводит полное содержимое поста.

И я пробовал этот вариант:

<?php echo apply_filters('the_excerpt', get_post_field('post_excerpt', $post->ID)); ?>

Но это ничего не возвращает.

Есть ли способ получить анонс из полного содержимого через $post, когда нельзя использовать the_excerpt или get_the_excerpt?

Спасибо!

2
Комментарии

По умолчанию WordPress должен брать первые 55 слов из the_content для использования в качестве the_excerpt, если он не задан явно.

Cedon Cedon
26 мая 2017 г. 04:07:20

Верно. Но в данном случае я не могу использовать the_content или the_excerpt. Мне нужно использовать $post->post_content или $post->post_excerpt.

LBF LBF
26 мая 2017 г. 04:10:26
Все ответы на вопрос 1
0
10

Когда вы находитесь в цикле, это создаст отрывок напрямую из $post->post_content:

<?php echo wp_trim_excerpt(); ?>

Подробнее читайте ЗДЕСЬ.

Альтернативное решение:

Если вы не в цикле, вы можете использовать аналогичную реализацию, как в функции wp_trim_excerpt:

$text = strip_shortcodes( $post->post_content );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]&gt;', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;
26 мая 2017 г. 04:14:21