Разница между the_content() и get_post()?
Я работаю над доработкой темы и мне нужно разбить содержимое записи, чтобы удалить часть текста. Использую следующий код:
$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();
МОЙ ВОПРОС: В чем разница между этими двумя методами получения содержимого записи?

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] );

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);
