Perché the_content() non funziona in questa pagina {single-custom_post_type.php}?
Questo codice proviene dalla mia pagina single-publication.php.
Mostra i custom fields rilevanti ecc (qui racchiusi in tag template), ma the_content() non visualizza il contenuto del post. Ho dovuto ricorrere all'uso di $post->post_content (che funziona), ma il mistero rimane:
<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() non funziona. Perché? ?></div>
</div>
Cosa sta succedendo qui?
MODIFICA: Sono stato spinto a fare questa domanda perché credevo - erroneamente, come si è scoperto - che il funzionamento di $post e il fatto che get_the_title() restituisse un titolo fossero un segno inequivocabile di essere all'interno del loop. Ma apparentemente non è così. Vedi Codex sul Loop (secondo paragrafo) e Codex su get_the_title() (elenco dei parametri). Qualcuno può spiegare?
È molto probabile che il tuo HTML non sia incluso nel loop. Assicurati che il tuo codice sia simile a questo:
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; // the_content() non funziona. Perché no? ?></div>
</div>
<?php endwhile; endif;
sì, questo funziona. grazie. ma come potrei ottenere get_the_title() al di fuori del loop? il codex dice $ID
(int) (opzionale) ID del post o lascia vuoto per usare il post corrente nel Loop
djb
Perché utilizza l'oggetto $post che viene impostato per la pagina. È un po' strano di sicuro. the_content() dipende dalla funzione the_post().
Brian Fegter
Sì, devi posizionare la funzione the_content() all'interno del loop. Il modo in cui penso che the_content() dovrebbe essere impostato in un file single.php o post-type.php. Ma per qualche motivo non lo è. Devi comunque avere un loop nel file single.php o post-type.php.
Sisir
grazie mille. un'ultima richiesta: puoi indicarmi qualche risorsa che spiega un po' di più su quando e come viene effettivamente impostato $post, se non è impostato all'inizio del loop? vorrei capire meglio.
djb
@BrianFegter correggimi se sbaglio: in single-{post_type}.php, c'è sempre 1 post. Pertanto, il while(have_posts()){} può essere omesso. Non è così?
Raptor
@ShivanRaptor Le best practice prevedono di includere sempre il loop
Brian Fegter
Anch'io sono confuso da questo. Qualcuno può spiegare più chiaramente perché il titolo è disponibile fuori dal loop, ma il contenuto no? @Brian dici che è perché utilizza l'oggetto post impostato per la pagina, ma non contiene anche i dati del contenuto? Cosa mi sfugge qui, per favore?
Robin Andrews
Alcuni dati relativi ai post non sono disponibili di default con get_posts, come il contenuto del post tramite the_content(), o l'ID numerico. Questo problema si risolve chiamando una funzione interna setup_postdata(), passando l'array $post come argomento:
<?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();
?>