Ottenere il contenuto di un post fuori dal loop

10 mag 2012, 13:44:07
Visualizzazioni: 72.2K
Voti: 26

Esiste un modo per ottenere il contenuto di un altro post fuori dal loop? L'ID è 302 e ho bisogno di visualizzare il contenuto di quel post in un'altra pagina.

1
Commenti

Non conosci l'ID? Usa 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
Tutte le risposte alla domanda 11
3
45

Puoi utilizzare get_page() per restituire l'oggetto $post di una pagina statica:

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

Modifica

Allo stesso modo, puoi usare get_post() per restituire l'oggetto $post di un articolo:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
10 mag 2012 14:15:47
Commenti

Gli shortcode funzionano ancora utilizzando questo metodo?

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

Ho appena scoperto che non funzionano. Usa prima setup_postdata( $post );, dopo di che puoi usare the_content();

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

Potresti semplicemente eseguire apply_filters( 'the_content', $post_object->post_content );

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

per ottenere il contenuto del post al di fuori del loop puoi scrivere qualcosa come questo

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

if ( !empty( $content ) ) :
    echo $content;
endif;
14 set 2014 18:40:41
Commenti

global $post è disponibile solo all'interno del loop, che è il punto centrale della domanda

dtw dtw
7 giu 2023 12:37:23

No, questa è disponibile anche al di fuori del loop. È una variabile globale e contiene i dati del post corrente. https://codex.wordpress.org/Global_Variables

Aamer Shahzad Aamer Shahzad
12 giu 2023 10:15:24

Scusa, il mio commento non era abbastanza chiaro. Sì, è una variabile globale ma nota che si trova nella sezione intitolata "Inside the Loop variables", che dice "Mentre si è all'interno del loop, queste globali sono impostate, contenenti informazioni sul post corrente che viene elaborato."

Se il tuo codice viene eseguito su una pagina prima del loop, quale $post restituirà?

Inoltre, l'OP vuole ottenere il contenuto per un post, che NON è il post corrente, quindi non ha nemmeno senso in questo caso.

dtw dtw
13 giu 2023 14:51:32
1

Cercavo la stessa cosa, sono sorpreso che nessuno l'abbia detto:

$pageID = 302;

echo get_the_content(null, false, $pageID);

Funziona bene! :)

4 nov 2020 17:58:38
Commenti

Semplice ma elegante!

Faisal Ashfaq Faisal Ashfaq
20 ago 2021 21:19:35
3

Se il tuo contenuto include shortcode, dovresti utilizzare:

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

Non usare shortcode https://kovshenin.com/2013/dont-do_shortcode/

Brad Dalton Brad Dalton
25 giu 2015 00:52:50

Quella pagina non fornisce una ragione convincente per evitare do_shortcode a parte dire "Potrebbe essere lento" e "Puoi semplicemente usare la funzione che lo shortcode chiama." Queste ragioni sono valide solo per gli scenari più banali e semplici. Fallisce quando lo shortcode è generato altrove, o se ci sono più shortcode, o shortcode mescolati con altri contenuti e markup. Senza una ragione convincente, sarei in disaccordo con l'affermazione di evitare do_shortcode. Sembra un caso di ottimizzazione prematura.

Jeff Jeff
18 apr 2017 00:35:50

Inoltre aumenta l'accoppiamento tra il tuo codice e il codice originale dello shortcode. Se il metodo sottostante lo shortcode venisse rinominato o la sua firma cambiasse, il tuo codice si romperebbe.

Jeff Jeff
18 apr 2017 00:37:21
1

Per completezza, proseguendo il commento di Tim sopra e ispirato dall'articolo di Stephen Harris, la soluzione che permette di usare the_content() è:

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

In questo modo i filtri vengono applicati (verranno inseriti i paragrafi ecc.) e gli shortcode funzioneranno.

23 mag 2014 10:07:01
Commenti

Questo ha quasi fatto crashare il mio browser :/ rimuovere la e commerciale aiuta, ma ancora non analizza gli shortcode.

Zade Zade
5 ott 2015 11:12:53
0

Puoi utilizzare, come detto, la soluzione con get_post e $post_object->post_content, ma non dimenticare di aggiungere un controllo prima di utilizzare quell'oggetto post:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //altrimenti

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );
1 mar 2017 09:22:11
0

Dato che conosci l'ID del post di destinazione (302), potrebbe esserti utile questa sintassi abbreviata che puoi usare al di fuori del loop (anche se le sue prestazioni sono praticamente le stesse di qualsiasi altro metodo alternativo):

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

Puoi utilizzare la funzione get_post_data() per ottenere i dati di un post al di fuori del loop. Inserisci questo codice nel file functions.php

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

e poi aggiungi questo snippet per avere maggior controllo sul processo

<?php $data = get_post_data(302);
    echo $data->post_date;     // data del post
    echo $data->post_title;    // titolo del post
    echo $data->post_content;  // contenuto del post
    echo $data->comment_count; // numero di commenti
?>
8 feb 2016 17:57:09
1
-1

Puoi semplicemente chiamare get_the_content(postId)

<?php echo get_the_content($postId); ?>
20 apr 2016 22:43:37
Commenti

In realtà, non è possibile. Il primo argomento è per il contenuto quando c'è un link "leggi più": https://codex.wordpress.org/Function_Reference/get_the_content

joshcanhelp joshcanhelp
25 ago 2017 01:40:31
3
-2

usa wp_reset_postdata(); funzionerà.. (modificato)

<?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 può essere "post", "page" o il tuo custom post type. Qui p=302 è l'ID del tuo post.. Spero che funzioni.

4 apr 2015 09:20:21
Commenti

Non usare mai query_posts a meno che tu non abbia bisogno di interrompere le funzionalità della pagina. Usa sempre WP_Query o get_posts per query personalizzate :-)

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

sì.. hai ragione.. Si può usare anche WP_Query.. stesso risultato ottenuto..

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

C'è anche il filtro pre_get_posts, e the_post. Così tanti dettagli.

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

puoi inserire contenuto in una categoria X e usare query_post prima del while in questo modo:

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