Perché the_content() non funziona in questa pagina {single-custom_post_type.php}?

19 set 2011, 18:52:27
Visualizzazioni: 22.2K
Voti: 8

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?

2
Commenti

Il tuo blocco publication-info è all'interno del loop?

Brian Fegter Brian Fegter
19 set 2011 19:01:48

Presumo di sì, poiché $post è popolato e get_the_title() funziona

djb djb
19 set 2011 19:11:33
Tutte le risposte alla domanda 2
7

È 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;
19 set 2011 19:14:49
Commenti

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 djb
19 set 2011 19:19:39

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 Brian Fegter
19 set 2011 19:30:01

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 Sisir
19 set 2011 19:32:46

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 djb
19 set 2011 19:39:56

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

Raptor Raptor
17 set 2013 07:35:10

@ShivanRaptor Le best practice prevedono di includere sempre il loop

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

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 Robin Andrews
29 ott 2016 17:38:48
Mostra i restanti 2 commenti
0

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

Vedi Accesso a tutti i dati del post

5 gen 2015 04:38:45