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

Perché utilizza l'oggetto $post che viene impostato per la pagina. È un po' strano di sicuro. the_content() dipende dalla funzione the_post().

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
.

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.

@BrianFegter correggimi se sbaglio: in single-{post_type}.php
, c'è sempre 1 post. Pertanto, il while(have_posts()){}
può essere omesso. Non è così?

@ShivanRaptor Le best practice prevedono di includere sempre il loop

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?

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();
?>
