Holen Sie sich Inhalte von außerhalb der Schleife


Antworten:


39

Mit können Sie get_page()das $postObjekt einer statischen Seite zurückgeben:

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

Bearbeiten

Auf ähnliche Weise können Sie get_post()das $postObjekt eines Posts zurückgeben:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

Funktionieren Shortcodes bei dieser Verwendung noch?
Tim Baas

Ich habe gerade herausgefunden, dass es nicht so ist. Verwenden Sie setup_postdata( $post );zuerst, danach können Siethe_content();
Tim Baas

4
Sie könnten einfach laufenapply_filters( 'the_content', $post_object->post_content );
Nathan Powell

6

Um den Inhalt des Posts außerhalb der Schleife zu erhalten, können Sie so etwas schreiben

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;

3

Wenn Ihr Inhalt Shortcodes enthält, sollten Sie Folgendes verwenden:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


Diese Seite bietet keinen zwingenden Grund, etwas do_shortcodeanderes zu vermeiden, als zu sagen: "Es könnte langsam sein" und "Sie können einfach die Funktion verwenden, die der Funktionscode aufruft." Diese Gründe gelten nur für die einfachsten Fälle. Es schlägt fehl, wenn der Shortcode an einer anderen Stelle generiert wird oder wenn mehrere Shortcodes vorhanden sind oder Shortcodes mit anderen Inhalten und Markups gemischt sind. Ohne zwingenden Grund würde ich der zu vermeidenden Aussage nicht zustimmen do_shortcode. Das riecht nach vorzeitiger Optimierung .
Jeff

Und es erhöht auch die Kopplung zwischen Ihrem Code und dem Code des ursprünglichen Shortcodes. Wenn die Sicherungsmethode des Shortcodes jemals umbenannt wird oder sich die Signatur ändert, wird Ihr Code beschädigt.
Jeff

1

Der Vollständigkeit halber, basierend auf Tims Kommentar oben und inspiriert von Stephen Harris 'Artikel , the_content()lautet die Lösung, die die Verwendung von ermöglicht :

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

Dadurch werden Filter angewendet (Absätze werden eingefügt usw.) und Shortcodes funktionieren.


Das hat meinen Browser fast zum Absturz gebracht: / das kaufmännische Und hilft, aber es analysiert immer noch keine Shortcodes.
Zade

0

Da Sie Ihre Ziel-Beitrags-ID (302) kennen, ist diese Syntax möglicherweise nützlich, die Sie auch außerhalb der Schleife verwenden können (obwohl die Leistung fast dieselbe ist wie bei jeder anderen alternativen Methode :)

echo(get_post_field('post_content',302));

0

Sie können die get_post_data()Funktion verwenden, um Beiträge außerhalb der Schleife zu veröffentlichen. Platziere diesen Code in functions.php

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

Fügen Sie dann dieses Snippet hinzu, um mehr Kontrolle über den Prozess zu erhalten

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>

0

Sie können, wie gesagt, die Lösung mit get_postund verwenden $post_object->post_content, aber vergessen Sie nicht, ein Häkchen hinzuzufügen, bevor Sie dieses Beitragsobjekt verwenden:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );


-2

benutze wp_reset_postdata();es wird funktionieren .. (bearbeitet)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

Der Posttyp kann "post", "page" oder Ihr benutzerdefinierter Posttyp sein. Hier ist p = 302 Ihre Beitrags-ID. Ich hoffe, es wird funktionieren.


2
Niemals verwenden, es query_postssei denn, Sie müssen die Seitenfunktionen unterbrechen. Verwenden Sie immer WP_Queryoder get_postsfür benutzerdefinierte Abfragen :-)
Pieter Goosen

ja .. du hast recht .. es kann auch Wp_Query .. das gleiche Ergebnis gefunden ..
Jahirul Islam Mamun

Es gibt auch den pre_get_postsFilter und the_post. So viele Details.
Nathan Powell

-3

Sie können Inhalte in eine Kategorie X einfügen und zuvor query_post verwenden, während Sie wie folgt vorgehen:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.