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

16 окт. 2014 г., 15:17:21
Просмотры: 71.9K
Голосов: 28

Я пытаюсь получить содержимое определенной записи:

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

Однако это извлекает содержимое без переносов строк и пропускает все теги <p>.

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

0
Все ответы на вопрос 3
1
43

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

Если использовать:

$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.

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

16 окт. 2014 г. 18:11:59
Комментарии

Я считаю, что это окончательное решение неверно. Из https://codex.wordpress.org/Function_Reference/get_the_content : "Важное отличие от the_content() заключается в том, что get_the_content() не пропускает контент через фильтр 'the_content'."

Не означает ли это, что правильный подход должен быть $content = apply_filters('the_content', get_the_content);?

Tim MB Tim MB
1 сент. 2017 г. 14:00:22
0

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

$content = apply_filters('the_content', $post->post_content);
16 окт. 2014 г. 15:21:09
1

Второй способ получить содержимое записи с тегом p:

echo wpautop( $post->post_content );
16 окт. 2014 г. 17:04:49
Комментарии

Как адаптировать это под следующий код? <?php $term = get_queried_object(); /*** echo $term->slug; ***/ ?> <span class="entry-content"> <?php $page = get_posts([ 'name' => $term->slug, 'post_type' => 'page' ]); if ( $page ){ echo $page[0]->post_content; } ?> </span>

Pete Pete
9 дек. 2021 г. 06:14:46