¿Por qué the_content() no funciona en esta página {single-custom_post_type.php}?

19 sept 2011, 18:52:27
Vistas: 22.2K
Votos: 8

Este código es de mi página single-publication.php.

Muestra los campos personalizados relevantes (aquí envueltos en etiquetas de plantilla), pero the_content() no muestra el contenido de la entrada. He recurrido a usar $post->post_content (que funciona), pero el misterio persiste:

<div class="publication-info">
    <?php printf("<h2>%s</h2>", get_the_title() ); ?>
    <div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
    <div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
    <div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // the_content() no funciona. ¿Por qué no? ?></div>
</div>

¿Qué está pasando aquí?

EDICIÓN: Me vi impulsado a hacer esta pregunta porque creía - erróneamente, como resultó ser - que el funcionamiento de $post y que get_the_title() devolviera un título eran una señal inequívoca de estar dentro del loop. Pero aparentemente este no es el caso. cf Codex sobre The Loop (segundo párrafo) y Codex sobre get_the_title() (lista de parámetros). ¿Alguien puede explicarlo?

2
Comentarios

¿Está tu bloque de información de publicación dentro del bucle?

Brian Fegter Brian Fegter
19 sept 2011 19:01:48

Asumo que sí, ya que $post está poblado y get_the_title() funciona

djb djb
19 sept 2011 19:11:33
Todas las respuestas a la pregunta 2
7

Es muy probable que tu HTML no esté incluido en el loop. Asegúrate de que tu código se vea así:

if(have_posts()): while(have_posts()): the_post(); ?>

    <div class="publication-info">
        <?php printf("<h2>%s</h2>", get_the_title() ); ?>
        <div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
        <div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
        <div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // ¿Por qué the_content() no funciona aquí? ?></div>
    </div>

<?php endwhile; endif;
19 sept 2011 19:14:49
Comentarios

sí, esto funciona. gracias. pero ¿cómo podría usar get_the_title() fuera del loop? el codex dice $ID (int) (opcional) ID del post o dejar vacío para usar el post actual en The Loop

djb djb
19 sept 2011 19:19:39

Porque usa el objeto $post que está configurado para la página. Es un poco inestable, sin duda. the_content() depende de la función the_post().

Brian Fegter Brian Fegter
19 sept 2011 19:30:01

Sí, tienes que colocar la función the_content() dentro del loop. La forma en que veo que the_content() debería configurarse es en un archivo single.php o post-type.php. Pero por alguna razón no es así. Todavía necesitas tener un loop en el archivo single.php o post-type.php.

Sisir Sisir
19 sept 2011 19:32:46

muchas gracias. una última petición: ¿puedes indicarme algún recurso que explique un poco más sobre cuándo y cómo se establece realmente $post, si no se establece al inicio del loop? me gustaría entenderlo.

djb djb
19 sept 2011 19:39:56

@BrianFegter corrígeme si me equivoco: en single-{post_type}.php, siempre hay 1 post. Por lo tanto, el while(have_posts()){} puede omitirse. ¿No es así?

Raptor Raptor
17 sept 2013 07:35:10

@ShivanRaptor Las mejores prácticas indican que siempre se debe incluir el loop

Brian Fegter Brian Fegter
17 sept 2013 16:03:21

También estoy confundido con esto. ¿Alguien puede explicar más claramente por qué el título está disponible fuera del bucle, pero el contenido no? @Brian dices que es porque usa el objeto de publicación establecido para la página, pero ¿ese objeto no contiene también los datos del contenido? ¿Qué me estoy perdiendo aquí, por favor?

Robin Andrews Robin Andrews
29 oct 2016 17:38:48
Mostrar los 2 comentarios restantes
0

Algunos datos relacionados con las publicaciones no están disponibles por defecto en get_posts, como el contenido de la publicación a través de the_content() o el ID numérico. Esto se resuelve llamando a una función interna setup_postdata(), con el array $post como argumento:

<?php
$args = array( 'posts_per_page' => 3 );
$lastposts = get_posts( $args );
foreach ( $lastposts as $post ) :
  setup_postdata( $post ); ?>
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php the_content(); ?>
<?php endforeach; 
wp_reset_postdata();
?>

Ver Acceder a todos los datos de la publicación

5 ene 2015 04:38:45