Как получить 'post_content' без удаления тегов <p>?
Я пытаюсь получить содержимое определенной записи:
$post = get_post(/* id */);
$content = $post->post_content;
Однако это извлекает содержимое без переносов строк и пропускает все теги <p>
.
Как правильно получить содержимое записи без удаления тегов <p>
(как это отображается на странице записи или во вкладке "Текст" редактора записей)?

Оба предыдущих ответа верны, но более детальный ответ представляется уместным.
Если использовать:
$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-й варианты.

Я считаю, что это окончательное решение неверно. Из https://codex.wordpress.org/Function_Reference/get_the_content : "Важное отличие от the_content() заключается в том, что get_the_content() не пропускает контент через фильтр 'the_content'."
Не означает ли это, что правильный подход должен быть $content = apply_filters('the_content', get_the_content);
?
