Obține conținutul unei postări din afara buclei

10 mai 2012, 13:44:07
Vizualizări: 72.2K
Voturi: 26

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

1
Comentarii

Nu știi ID-ul? Folosește get_queried_object_id() ! https://developer.wordpress.org/reference/classes/wp_query/get_queried_object_id/

jave.web jave.web
12 apr. 2016 19:13:52
Toate răspunsurile la întrebare 11
3
45

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;
10 mai 2012 14:15:47
Comentarii

Funcționează încă shortcode-urile când folosești asta?

Tim Baas Tim Baas
20 feb. 2014 23:35:35

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

Tim Baas Tim Baas
20 feb. 2014 23:39:28

Ai putea pur și simplu să rulezi apply_filters( 'the_content', $post_object->post_content );

Nathan Powell Nathan Powell
1 mar. 2017 09:30:10
3

pentru a obține conținutul postării în afara buclei, poți scrie ceva de genul acesta

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

if ( !empty( $content ) ) :
    echo $content;
endif;
14 sept. 2014 18:40:41
Comentarii

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

dtw dtw
7 iun. 2023 12:37:23

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

Aamer Shahzad Aamer Shahzad
12 iun. 2023 10:15:24

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.

dtw dtw
13 iun. 2023 14:51:32
1

Căutam același lucru, sunt surprins că nimeni nu a menționat asta:

$pageID = 302;

echo get_the_content(null, false, $pageID);

Funcționează perfect! :)

4 nov. 2020 17:58:38
Comentarii

Simplu, dar elegant!

Faisal Ashfaq Faisal Ashfaq
20 aug. 2021 21:19:35
3

Dacă conținutul tău include shortcode-uri, ar trebui să folosești:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
23 mar. 2014 19:29:33
Comentarii

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

Brad Dalton Brad Dalton
25 iun. 2015 00:52:50

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

Jeff Jeff
18 apr. 2017 00:35:50

Și de asemenea crește cuplarea dintre codul tău și codul original al shortcode-ului. Dacă metoda din spatele shortcode-ului este redenumită sau semnătura ei se schimbă, codul tău va avea probleme.

Jeff Jeff
18 apr. 2017 00:37:21
1

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

23 mai 2014 10:07:01
Comentarii

Aproape mi-a blocat browserul :/ eliminarea simbolului & ajută, dar tot nu parsează shortcode-urile.

Zade Zade
5 oct. 2015 11:12:53
0

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 );
1 mar. 2017 09:22:11
0

Deoarece știți ID-ul postării țintă (302), vă poate fi utilă această sintaxă prescurtată pe care o puteți folosi în afara buclei (deși performanța sa este practic aceeași ca în orice altă metodă alternativă:)

echo(get_post_field('post_content',302));
25 iun. 2015 00:26:56
0

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
?>
8 feb. 2016 17:57:09
1
-1

Puteți apela simplu funcția get_the_content(postId)

<?php echo get_the_content($postId); ?>
20 apr. 2016 22:43:37
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

joshcanhelp joshcanhelp
25 aug. 2017 01:40:31
3
-2

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.

4 apr. 2015 09:20:21
Comentarii

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

Pieter Goosen Pieter Goosen
4 apr. 2015 09:55:33

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

Jahirul Islam Mamun Jahirul Islam Mamun
5 apr. 2015 22:23:31

Există și filtrul pre_get_posts, și the_post. Atât de multe detalii.

Nathan Powell Nathan Powell
1 mar. 2017 09:35:36
0
-3

poți pune conținut într-o categorie X și să folosești query_post înainte de while astfel:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
10 mai 2012 14:20:49