Holen Sie sich Inhalte von außerhalb der Schleife

22

Gibt es eine Möglichkeit, den Inhalt von einem anderen außerhalb der Schleife abzurufen? Die ID ist 302 und ich muss den Inhalt davon auf einer anderen Seite anzeigen.

rauben
quelle
Kennst du den Ausweis nicht? Nutzen Sie get_queried_object_id()! developer.wordpress.org/reference/classes/wp_query/…
jave.web

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;
Chris_O
quelle
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;
Aamer Shahzad
quelle
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 );
DSI_ClasH
quelle
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.

Jon
quelle
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));
E. Serrano
quelle
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
?>
Zohair Baloch
quelle
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 );
Olga Farber
quelle
-1

Sie können einfach get_the_content (postId) aufrufen.

<?php echo get_the_content($postId); ?>
NiemBlackPine
quelle
2
Eigentlich ist das nicht möglich. Das erste Argument für den Inhalt gibt es, wenn es einen weiteren Link gibt: codex.wordpress.org/Function_Reference/get_the_content
joshcanhelp
-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.

Jahirul Islam Mamun
quelle
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; ?>
Zakaria Elhariri
quelle