it-swarm.com.de

Was ist der richtige Weg, um den Inhalt einer Seite zu erhalten?

Das Ziel ist sehr einfach - Seiteninhalt auf einer Seite zu drucken. Ich habe es versucht:

<?php the_content() ?>
<?= get_the_content() ?>

dann

<?php the_content(get_the_ID()) ?>
<?= get_the_content(get_the_ID()) ?>

Keiner von ihnen hat funktioniert.

Dann fand ich diese bizarre Lösung:

<?= apply_filters('the_content', get_post_field('post_content', get_the_ID() )) ?>

Warum haben the_content () und get_the_content () nicht funktioniert?

Gibt es eine sauberere Lösung für die Anzeige des Seiteninhalts als die letzte?

1
Boykodev

Ein paar Notizen bevor ich anfange

  • NIEMALS PHP-Shortcodes verwenden, sie sind schlecht, verwirrend und werden auf einigen Servern standardmäßig nicht unterstützt. IMHO, sie hätten es niemals in PHP schaffen sollen. WordPress-Standards , die nicht viel bedeuten , "verbieten" auch die Verwendung von Shorttags. Verwenden Sie die richtigen PHP-Tags und vergessen Sie, dass es sogar Shorttags gibt

  • the_content() und get_the_content() akzeptiert nicht die Post-ID, den Parameter firts für Beide Template-Tags sind $more_link_text

  • get_the_content() sowie der aus dem Feld post_content abgerufene Inhalt sind ungefilterte Inhalte. the_content -Filter sind eine Reihe von Filtern, die auf diesen ungefilterten Inhalt angewendet werden. Dazu gehören Filter wie wpautop, die p -Tags auf the_content() anwenden.

Nach allgemeiner Meinung müssen the_content() und get_the_content() _ innerhalb der Schleife verwendet werden. Das ist nicht ganz richtig, obwohl es wirklich nicht empfehlenswert ist, es außerhalb der Schleife zu verwenden. Genau wie get_the_ID() erwartet get_the_content(), dass globale Post-Daten eingerichtet werden ($post = get_post()), wenn also Post-Daten vorhanden sind Wenn es außerhalb der Schleife im globalen Bereich verfügbar ist, werden die Daten zurückgegeben.

Ihr Problem ist ziemlich seltsam, wenn wir uns die Quellcodes hier ansehen, rufen sowohl get_the_ID() als auch get_the_content()$post = get_post() auf, und get_post() gibt $GLOBALS['post'] zurück, wenn keine ID übergeben wird, und wenn $GLOBALS['post'] gesetzt sind, was hier der Fall zu sein scheint. get_post_field() gibt den von Ihnen angegebenen Seiteninhalt erfolgreich zurück. Dies bedeutet, dass get_the_ID() die korrekte Seiten-ID zurückgibt, die wir haben. Dies bedeutet, dass get_the_content() funktionieren und ungefilterten Seiteninhalt zurückgeben sollte. the_content() sollte gefilterten Seiteninhalt anzeigen )

Wie auch immer, Sie müssen das debuggen, warum die Dinge nicht wie erwartet funktionieren sollen. Um Ihre Frage zur korrekten und zuverlässigen Anzeige von Seiteninhalten ohne Schleife zu beantworten, können Sie auf das abgefragte Objekt zugreifen, die Eigenschaft $post_content abrufen, die Inhaltsfilter darauf anwenden und den Inhalt anzeigen. Nur eine Anmerkung, dies wird nicht funktionieren, wenn Sie query_posts in irgendeiner Weise verwenden, da es das Hauptabfrageobjekt zerstört, das das abgefragte Objekt enthält. Dies ist der Hauptgrund, warum niemals query_posts verwendet werden darf.

$current_page = get_queried_object();
$content      = apply_filters( 'the_content', $current_page->post_content );
echo $content;
3
Pieter Goosen

Zeigt den Inhalt des aktuellen Beitrags an. Dieses Template-Tag muss sich in der while-Schleife befinden.

<?php 
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            the_content(); 
        } // end while
    } // end if
?>

Mehr: the_content () - WordPress Codex

2
Daniel Noaein