Использование the_content вне цикла
Я пытался получить первые 100 слов контента в шапке сайта и использовал следующий код для получения первых 100 слов в цикле, но возможно ли получить это значение вне цикла:
$cstring = get_the_content( '' );
$newcString = substr( $cstring, 0, 100 );
echo'<p>' . $newcString . '</p>';

Я написал статью на эту тему здесь, но вот краткое содержание основных моментов:
the_content
можно использовать только «внутри цикла»- «внутри цикла» можно корректно «симулировать» только вызовом
setup_postdata()
иglobal $post
. - После этого необходимо очистить данные, вызвав
wp_reset_postdata()
Приведённый ниже код предоставляет функцию для получения содержимого записи по её ID. Он отличается от ответа @NickYoung тем, что полученное содержимое — это не то, что хранится в колонке post_content
таблицы posts, а скорее то содержимое, которое прошло через фильтр the_content
(например, с обработанными шорткодами и т.д.).
Код
/**
* Отображает содержимое записи. Опционально позволяет передать ID записи
* @uses the_content()
* @link http://stephenharris.info/get-post-content-by-id/
* @link https://wordpress.stackexchange.com/questions/142957/use-the-content-outside-the-loop
* @param int $id Опционально. ID записи.
* @param string $more_link_text Опционально. Текст для ссылки "Читать далее".
* @param bool $stripteaser Опционально. Удалять тизерный контент перед текстом "Читать далее". По умолчанию false.
*/
function sh_the_content_by_id( $post_id=0, $more_link_text = null, $stripteaser = false ){
global $post;
$post = get_post($post_id);
setup_postdata( $post, $more_link_text, $stripteaser );
the_content();
wp_reset_postdata( $post );
}

Хорошее замечание, что контент не фильтруется. В таком случае, можно использовать $post->post_content_filtered, верно? Я раньше не использовал этот вариант, но похоже, что он тоже подойдет.

Вы можете использовать get_page() или get_post() для получения контента вне цикла
// Для страницы
$page_id = 1;
$get_page_object = get_page( $page_id );
$page_object = $get_page_object->post_content;
echo $newpagecString = substr($page_object, 0, 100);
// Для записи
$post_id = 2;
$get_post_object = get_post( $post_id );
$post_object = $get_post_object->post_content;
echo $newpostcString = substr($post_object, 0, 100);

И зачем нужен $get_page_object
, если мы его нигде не вызываем?

А $post_id = 2;
— это ID текущей записи? Может, стоит использовать $post_id = $wp_query->post->ID;
?

$post_id - это идентификатор записи, данные которой вы хотите получить. $wp_query->post->ID; будет работать внутри цикла. Но я думаю, вы хотели получить содержимое страницы или записи вне цикла.
