Obține conținutul unei postări din afara buclei
Există o modalitate de a obține conținutul unei postări din afara buclei? ID-ul este 302 și trebuie să afișez conținutul acesteia pe o altă pagină.

Poți folosi get_page()
pentru a returna obiectul $post
al unei pagini statice:
$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;
Editare
În mod similar, poți folosi get_post()
pentru a returna obiectul $post
al unui articol:
$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

Tocmai am aflat că nu. Folosește mai întâi setup_postdata( $post );
, după care poți folosi the_content();

global $post
este disponibil doar în interiorul buclei, ceea ce reprezintă tocmai scopul întrebării

Nu, această variabilă este disponibilă și în afara buclei. Este o variabilă globală și conține datele postării curente. https://codex.wordpress.org/Global_Variables

Scuze, comentariul meu nu a fost suficient de clar. Da, este o variabilă globală, dar rețineți că se află în secțiunea intitulată "Variabile în interiorul buclei", unde se precizează: "În timp ce vă aflați în buclă, aceste variabile globale sunt setate, conținând informații despre postarea curentă care este procesată."
Dacă codul tău rulează pe o pagină înainte de buclă, ce postare va returna $post?
În plus, OP dorește să obțină conținutul pentru o postare care NU este postarea curentă, așa că nici măcar nu are sens în acest caz.

Nu folosi shortcode https://kovshenin.com/2013/dont-do_shortcode/

Această pagină nu oferă un motiv convingător pentru a evita do_shortcode
în afară de a spune "Ar putea fi lent" și "Poți folosi direct funcția pe care o apelează shortcode-ul". Aceste motive sunt valabile doar pentru cele mai simple scenarii. Argumentul nu funcționează când shortcode-ul este generat în altă parte, sau dacă există multiple shortcode-uri, sau shortcode-uri amestecate cu alt conținut și markup. Fără un motiv convingător, aș fi în dezacord cu afirmația de a evita do_shortcode
. Miroase a optimizare prematură.

Pentru completitudine, bazându-ne pe comentariul lui Tim de mai sus și inspirat de articolul lui Stephen Harris, soluția care permite utilizarea funcției the_content()
este:
$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );
Astfel, filtrele sunt aplicate (se vor insera paragrafe etc.) și shortcode-urile funcționează.

Puteți folosi, după cum s-a menționat, soluția cu get_post
și $post_object->post_content
, dar nu uitați să adăugați o verificare înainte de a folosi acel obiect post:
function get_post_content( $post_id = null ) {
$post_object = get_post( $post_id );
if ( ! $post_object ) { return ''; }
//altfel
return apply_filters('the_content', $post_object->post_content);
}
echo get_post_content( $other_post_id );

Poți folosi funcția get_post_data()
pentru a obține datele unui post în afara loop-ului. Pune acest cod în functions.php
function get_post_data($postId) {
global $wpdb;
return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}
și apoi adaugă acest fragment pentru mai mult control asupra procesului
<?php $data = get_post_data(302);
echo $data->post_date; // data postării
echo $data->post_title; // titlul postării
echo $data->post_content; // conținutul postării
echo $data->comment_count; // numărul de comentarii
?>

De fapt, asta nu este posibil. Primul argument este pentru conținutul când există un link "more": https://codex.wordpress.org/Function_Reference/get_the_content

folosește wp_reset_postdata();
va funcționa.. (editat)
<?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 poate fi "post", "page" sau tipul tău personalizat de postare. Aici p=302 este ID-ul postării tale.. Sper că va funcționa.

Niciodată nu folosiți query_posts
decât dacă trebuie să afectați funcționalitățile paginii. Întotdeauna folosiți WP_Query
sau get_posts
pentru interogări personalizate :-)

da.. ai dreptate.. Se poate folosi și WP_Query.. același rezultat..
