Warum funktioniert the_content () auf dieser Seite {single-custom_post_type.php} nicht?

7

Dieser Code stammt von meiner Seite single-publication.php.

Es gibt die relevanten benutzerdefinierten Felder usw. aus (hier in Vorlagen-Tags eingeschlossen), gibt jedoch the_content()den Post-Inhalt nicht aus. Ich habe auf die Verwendung zurückgegriffen $post->post_content(was funktioniert), aber das Rätsel bleibt:

<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() doesn't work. Why not? ?></div>
</div>

Was ist denn hier los?

EDIT: Ich war getrieben, diese Frage zu stellen, weil ich - wie sich herausstellte - fälschlicherweise glaubte, dass das $postArbeiten und get_the_title()Zurückgeben eines Titels ein eisernes Zeichen dafür war, dass ich mich in der Schleife befand. Dies ist aber anscheinend nicht der Fall. Siehe Codex on The Loop (zweiter Absatz) und Codex on get_the_title () (Parameterliste). Kann jemand erklären?

djb
quelle
2
Befindet sich Ihr Publikationsinfoblock in der Schleife?
Brian Fegter
Ich gehe davon aus, wie $postes bevölkert ist und get_the_title()funktioniert
djb

Antworten:

3

Einige postbezogene Daten sind für get_posts standardmäßig nicht verfügbar , z. B. Postinhalt durchthe_content() oder die numerische ID. Dies wird durch Aufrufen einer internen Funktion setup_postdata()mit dem Array $ post als Argument behoben :

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

Siehe Zugriff auf alle Post-Daten

Giraldi
quelle
9

Es besteht eine gute Chance, dass Ihr HTML nicht in der Schleife enthalten ist. Stellen Sie sicher, dass Ihr Code folgendermaßen aussieht:

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() doesn't work. Why not? ?></div>
    </div>

<?php endwhile; endif;
Brian Fegter
quelle
Ja, das funktioniert. Vielen Dank. aber wie könnte ich möglicherweise_the_title () von außerhalb der Schleife bekommen? Der Kodex sagt$ID (int) (optional) Post ID or leave empty to use current post in The Loop
DJB
Weil es das $ post-Objekt verwendet, das für die Seite festgelegt ist. Es ist sicher ein bisschen wackelig. the_content () ist abhängig von der Funktion_post ().
Brian Fegter
Ja, Sie müssen die the_content()Funktion innerhalb der Schleife platzieren. Die Art und Weise, wie ich mich fühle, the_content()sollte in einer single.phpoder post-type.phpDatei festgelegt werden. Aber aus irgendeinem Grund ist es nicht. Sie müssen noch eine Schleife in der Datei single.phpoder haben post-type.php.
Sisir
Vielen Dank. eine letzte Anfrage: Können Sie mich auf eine Ressource verweisen, die etwas mehr darüber erklärt, wann und wie $ post tatsächlich gesetzt wird, wenn es nicht am Anfang der Schleife gesetzt ist? würde gerne verstehen.
DJB
@BrianFegter korrigiere mich, wenn ich falsch liege: in single-{post_type}.phpgibt es immer 1 Beitrag. Daher while(have_posts()){}kann das weggelassen werden. Ist es nicht?
Raptor