Разница между the_content() и get_post()?

25 янв. 2018 г., 23:21:17
Просмотры: 14.3K
Голосов: 7

Я работаю над доработкой темы и мне нужно разбить содержимое записи, чтобы удалить часть текста. Использую следующий код:

$custom_Get_Post_Title = explode('|',get_post()->post_content);
echo "<h4>" . $custom_Get_Post_Title[0] . "</h4>";              
echo "<p>" . $custom_Get_Post_Title[1] . "</p>";

Изначально разработчик использовал следующий код для вывода содержимого записи, но он затруднял мне разбиение данных:

global $post;
setup_postdata($post);
the_content();

МОЙ ВОПРОС: В чем разница между этими двумя методами получения содержимого записи?

0
Все ответы на вопрос 2
0

post_content — это свойство объекта WP_Post. WP_Post представляет собой объект, содержащий данные записи из базы данных. Таким образом, post_content содержит сырое содержимое, как оно хранится в базе данных.

the_content() — это теговый шаблон (template tag), который выводит содержимое текущей записи. "Текущая запись" определяется глобальной переменной $post на момент выполнения функции. Обычно глобальная переменная $post устанавливается внутри Цикла (The Loop) с помощью while( have_posts() ) : the_post();.

Ключевое отличие в том, что the_content() пропускает сырое содержимое через несколько фильтров, которые подготавливают его для отображения. Эти фильтры выполняют такие действия, как добавление тегов абзацев, преобразование URL в embed-объекты (например, для видео), замена обычных кавычек на "умные" и т.д. Многие плагины также используют этот фильтр для добавления таких элементов, как кнопки "Поделиться".

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

$post = get_post();

$split_content = explode( '|', $post->post_content );

echo '<h4>' . $split_content[0] . '</h4>';              
echo apply_filters( 'the_content', $split_content[1] );
26 янв. 2018 г. 06:17:59
0

get_post() аналогичен использованию global $post

Функции типа the_content() могут использоваться только внутри цикла.

Функция setup_postdata() позволяет сделать эти функции доступными.

Ваш первый пример можно переписать следующим образом:

global $post;
$custom_Get_Post_Title = explode('|',$post->post_content);

Или аналогично для второго примера:

global $post;
// setup_postdata($post); <- не обязательно
$theContent = get_the_content($post->ID); // можно использовать ID поста для получения конкретного
$custom_Get_Post_Title = explode('|',get_post()->post_content);
25 янв. 2018 г. 23:44:05