Uzyskaj treść postu spoza pętli

Odpowiedzi:

39

Możesz użyć, get_page()aby zwrócić $postobiekt strony statycznej:

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

Edytować

Podobnie możesz użyć, get_post()aby zwrócić $postobiekt postu:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
Chris_O
źródło
Czy podczas korzystania z nich nadal działają skróty?
Tim Baas,
Właśnie się dowiedziałem, że nie. setup_postdata( $post );Najpierw użyj , potem możesz użyćthe_content();
Tim Baas
4
Możesz po prostu biecapply_filters( 'the_content', $post_object->post_content );
Nathan Powell
6

aby uzyskać treść postu poza pętlą, możesz napisać coś takiego

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

if ( !empty( $content ) ) :
    echo $content;
endif;
Aamer Shahzad
źródło
3

Jeśli treść zawiera skróty, należy użyć:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
DSI_ClasH
źródło
Nie rób shortcode kovshenin.com/2013/dont-do_shortcode
Brad Dalton
Ta strona nie stanowi istotnego powodu, aby unikać do_shortcodeinnych niż powiedzenie: „Może być powolne” i „Możesz po prostu użyć funkcji wywoływanej przez krótki kod”. Powody te dotyczą tylko najbardziej trywialnych dla najprostszych scenariuszy. Nie udaje się, gdy shortcode jest generowany gdzie indziej, lub jeśli jest wiele skrótów lub skrótów zmieszanych z inną zawartością i znacznikami. Bez ważnego powodu nie zgadzam się z tym stwierdzeniem, którego należy unikać do_shortcode. To pachnie jak przedwczesna optymalizacja .
Jeff
Zwiększa także sprzężenie między twoim kodem a oryginalnym kodem shortcode. Jeśli nazwa kopii zapasowej metody shortcode zostanie kiedykolwiek zmieniona lub podpis zostanie zmieniony, kod się zepsuje.
Jeff
1

Dla kompletności, w oparciu o powyższy komentarz Tima i zainspirowany artykułem Stephena Harrisa , rozwiązaniem umożliwiającym użycie the_content()jest:

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

W związku z tym filtry są stosowane (wstawiane akapity itp.) I działają skróty.

Jon
źródło
To prawie zawiesiło moją przeglądarkę: / wyjęcie ampersand pomaga, ale wciąż nie analizuje skrótów.
Zade
0

Ponieważ znasz swój docelowy identyfikator posta (302), przydatna może być ta skrócona składnia, której możesz użyć poza pętlą (chociaż jej wydajność jest prawie taka sama jak w każdej innej metodzie alternatywnej :)

echo(get_post_field('post_content',302));
E. Serrano
źródło
0

Możesz użyć tej get_post_data()funkcji, aby dostać się poza pętlę. Umieść ten kod w functions.php

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

a następnie dodaj ten fragment kodu, aby uzyskać większą kontrolę nad procesem

<?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
źródło
0

Jak już wspomniano, możesz użyć rozwiązania z get_posti $post_object->post_content, ale nie zapomnij dodać czeku przed użyciem tego obiektu postu:

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
źródło
-1

Możesz po prostu wywołać get_the_content (postId)

<?php echo get_the_content($postId); ?>
NiemBlackPine
źródło
2
W rzeczywistości nie jest to możliwe. Pierwszy argument dotyczy treści, gdy jest więcej linków: codex.wordpress.org/Function_Reference/get_the_content
joshcanhelp
-2

użyj wp_reset_postdata();go będzie działać .. (edytowane)

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

posttype może być „post”, „page” lub niestandardowym typem posta. Tutaj p = 302 to identyfikator twojego posta. Mam nadzieję, że zadziała.

Jahirul Islam Mamun
źródło
2
Nigdy nie używaj, query_postschyba że musisz zepsuć funkcje strony. Zawsze używaj WP_Querylub get_postsdo niestandardowych zapytań :-)
Pieter Goosen
tak .. masz rację .. Może również Wp_Query .. taki sam wynik znaleziony ..
Jahirul Islam Mamun
Istnieje również pre_get_postsfiltr i the_post. Tyle szczegółów.
Nathan Powell
-3

możesz umieścić treść w kategorii X i użyć zapytania_post przedtem w następujący sposób:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Zakaria Elhariri
źródło