Usar the_content fuera del bucle en WordPress
Estaba intentando obtener las primeras 100 palabras del contenido en el encabezado, y uso el siguiente fragmento para obtener las primeras 100 palabras dentro del bucle, pero ¿es posible obtener el valor fuera del bucle?:
$cstring = get_the_content( '' );
$newcString = substr( $cstring, 0, 100 );
echo'<p>' . $newcString . '</p>';

Escribí un artículo sobre esto aquí, pero aquí hay un resumen de los puntos:
the_content
solo se puede usar 'dentro del bucle'- 'dentro del bucle' solo se puede 'simular' correctamente llamando a
setup_postdata()
yglobal $post
. - Luego necesitas limpiar después de ti mismo llamando a
wp_reset_postdata()
El siguiente código proporciona una función para recuperar el contenido del post desde el ID del post. Difiere de la respuesta de @NickYoung en que el contenido que recibes no es lo que está almacenado en la columna post_content
de la tabla posts, sino ese contenido después de haber pasado por el filtro the_content
(por ejemplo, shortcodes parseados, etc.).
El código
/**
* Muestra el contenido del post. Opcionalmente permite pasar el ID del post
* @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 Opcional. ID del post.
* @param string $more_link_text Opcional. Contenido para cuando hay más texto.
* @param bool $stripteaser Opcional. Elimina el contenido del teaser antes del texto 'more'. Por defecto es 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 );
}

Ese es un buen punto sobre que no está filtrado. En ese caso podrías usar $post->post_content_filtered, ¿verdad? Nunca he usado esa versión antes pero parece que también serviría.

Puedes usar get_page() o get_post() para obtener contenido fuera del bucle (loop)
//Para página
$page_id = 1;
$get_page_object = get_page( $page_id );
$page_object = $get_page_object->post_content;
echo $newpagecString = substr($page_object, 0, 100);
//Para entrada (post)
$post_id = 2;
$get_post_object = get_post( $post_id );
$post_object = $get_post_object->post_content;
echo $newpostcString = substr($post_object, 0, 100);

¿Y por qué hay un $get_page_object
si no lo estamos llamando en ningún lugar?

¿Y $post_id = 2;
es el ID de la publicación actual? ¿Podemos llamarlo con $post_id = $wp_query->post->ID;
?

$post_id es el ID de esa publicación de la que quieres recuperar datos. $wp_query->post->ID; funcionará en el bucle. Pero creo que querías obtener el contenido de una página o publicación desde fuera del bucle.
