Как получить post_content без удаления тегов <p>?

20

Я пытаюсь получить содержание сообщения определенного сообщения:

$post = get_post(/* id */);
$content = $post->post_content;

Тем не менее, это извлекает контент без разрывов строки и пропускает все <p>теги.

Как правильно извлечь содержимое сообщения, не удаляя <p>теги (как это показано на странице сообщения или на вкладке « Текст » редактора сообщений )?

Лисандро Ваккаро
источник

Ответы:

30

Оба ответа пока верны, но более тщательный ответ кажется оправданным.

Если вы используете это:

$content = wpautop( $post->post_content );

вы применяете одну функцию, которая добавляет теги абзаца для публикации контента. wpautop()это одна из многих функций (включая временные функции плагинов), к которым можно подключиться the_content, поэтому если вы сделаете это:

$content = apply_filters('the_content', $post->post_content);

вы получаете содержимое публикации через любые фильтры, the_contentкоторые включают wpautop()по умолчанию.

Наконец, если вы находитесь в цикле, вы можете просто сделать это:

$content = apply_filters( 'the_content', get_the_content() );

который по сути является оберткой для второго фрагмента кода, но, конечно, он выглядит немного лучше. Обновление 1 сентября 2018 года: пересмотрено на основе комментариев . Реквизит @timmb.

Как правило, я бы сказал, что предпочтительный «правильный» способ сделать это - от последнего к первому, поскольку использование основной функции WP должно обеспечить более обратную совместимость (теоретически, по крайней мере). Единственное другое решение, которое следует принять, это то, хотите ли вы, чтобы WordPress и плагины также модифицировали содержимое публикации. Если это так, обязательно используйте 2-й или 3-й варианты.

mrwweb
источник
1
Я думаю, что это окончательное решение неверно. Из codex.wordpress.org/Function_Reference/get_the_content : «Важное отличие от the_content () состоит в том, что get_the_content () не пропускает содержимое через фильтр« the_content ».» Разве это не говорит о правильном подходе $content = apply_filters('the_content', get_the_content);?
Тим MB
7

Нашел решение:

$content = apply_filters('the_content', $post->post_content);
Лисандро Ваккаро
источник
4

Второй способ получить контент с тегом p

echo wpautop( $post->post_content );
ДИНЕШ БХИМАНИ
источник