Diferencia entre the_content() y get_post()
Estoy trabajando en ajustar un tema y necesito dividir el contenido de la publicación para eliminar cierto texto. El siguiente código es el que estoy usando:
$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>";
Originalmente, el desarrollador estaba usando el siguiente código para mostrar el contenido de la publicación, pero me dificultaba dividir los datos.
global $post;
setup_postdata($post);
the_content();
MI PREGUNTA: ¿Cuál es la diferencia entre estos dos métodos que ambos recuperan el contenido de la publicación?

post_content
es una propiedad del objeto WP_Post
. WP_Post
es un objeto que representa los datos del post desde la base de datos. Así que post_content
contiene el contenido crudo como está almacenado en la base de datos.
the_content()
es una etiqueta de plantilla que muestra el contenido del post actual. El 'post actual' es lo que sea que la variable global $post
esté configurada en el momento en que se ejecuta la función. La variable global $post
normalmente se establece dentro de El Loop con while( have_posts() ) : the_post();
.
La diferencia crucial es que the_content()
pasa el contenido crudo a través de varios filtros que lo preparan para su visualización. Estos hacen cosas como agregar etiquetas de párrafo, convertir URLs en embeds para cosas como videos, y convertir símbolos como comillas en comillas inteligentes, etc. Muchos plugins también usan este filtro, para agregar cosas como botones de compartir.
Así que si simplemente haces echo de post_content
probablemente no se verá correctamente. Puedes imitar la salida de the_content()
en datos crudos aplicando el filtro the_content
manualmente. Entonces en tu ejemplo harías:
$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()
es lo mismo que global $post
Funciones como the_content()
solo pueden usarse dentro de un bucle.
La función setup_postdata()
puede usarse para hacer que esas funciones estén disponibles.
Tu primer ejemplo podría reescribirse así:
global $post;
$custom_Get_Post_Title = explode('|',$post->post_content);
o podrías hacer algo similar con el segundo ejemplo:
global $post;
// setup_postdata($post); <- no es realmente necesario
$theContent = get_the_content($post->ID); // se puede usar el post-id para recuperar específico
$custom_Get_Post_Title = explode('|',get_post()->post_content);
