Як отримати "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-й варіанти.


1
Я думаю, що це остаточне рішення є неправильним. Від codex.wordpress.org/Function_Reference/get_the_content : "Важливою відмінністю від the_content () є те, що get_the_content () не передає вміст через фільтр" the_content "." Чи це не підкаже правильний підхід $content = apply_filters('the_content', get_the_content);?
Тім МБ


4

Другий метод отримання вмісту публікації з тегом p - це

echo wpautop( $post->post_content );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.