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;

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;

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


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.


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

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
?>

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


-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.


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; ?>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.