Ottieni contenuti post dall'esterno del ciclo


Risposte:


39

È possibile utilizzare get_page()per restituire l' $postoggetto di una pagina statica:

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

modificare

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

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

Gli shortcode funzionano ancora quando si utilizza questo?
Tim Baas,

Ho appena scoperto di no. Utilizzare setup_postdata( $post );prima, dopo di che, si può usarethe_content();
Tim Baas

4
Potresti semplicemente correreapply_filters( 'the_content', $post_object->post_content );
Nathan Powell

6

per ottenere il contenuto del post al di fuori del ciclo puoi scrivere qualcosa del genere

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

if ( !empty( $content ) ) :
    echo $content;
endif;

3

Se il contenuto include codici brevi, è necessario utilizzare:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


Quella pagina non fornisce un motivo convincente per evitare do_shortcodealtro che dire "Potrebbe essere lento" e "Puoi semplicemente usare la funzione che chiama il codice funzione". Questi motivi sono validi solo per gli scenari più banali per gli scenari più semplici. Non riesce quando lo shortcode viene generato da qualche altra parte, o se ci sono più shortcode o shortcode mescolati con altri contenuti e markup. Senza un motivo convincente, non sarei d'accordo con l'affermazione da evitare do_shortcode. Questo puzza di ottimizzazione prematura .
Jeff,

E aumenta anche l'accoppiamento tra il codice e il codice dello shortcode originale. Se il metodo di supporto dello shortcode viene mai rinominato o la firma cambia, il codice verrà interrotto.
Jeff,

1

Per completezza, basandosi sul commento di Tim sopra e ispirato all'articolo di Stephen Harris , la soluzione che consente l'uso di the_content()è:

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

E quindi i filtri vengono applicati (i paragrafi verranno inseriti ecc.) E gli shortcode funzionano.


Questo ha quasi bloccato il mio browser: / l'eliminazione della e commerciale aiuta, ma non sta ancora analizzando i codici funzione.
Zade,

0

Dato che conosci il tuo ID post target (302), potresti trovare utile questa sintassi abbreviata che puoi usare fuori dal ciclo (anche se le sue prestazioni sono praticamente le stesse di qualsiasi altro metodo alternativo :)

echo(get_post_field('post_content',302));

0

È possibile utilizzare la get_post_data()funzione per ottenere post al di fuori del ciclo. Inserisci questo codice in Functions.php

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

e quindi aggiungi questo snippet per un maggiore controllo sul processo

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

Puoi usare, come detto, la soluzione con get_poste $post_object->post_content, ma non dimenticare di aggiungere un segno di spunta prima di utilizzare quell'oggetto post:

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

usalo 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 tipo di post personalizzato. Qui p = 302 è il tuo post ID .. Spero che funzioni.


2
Non utilizzare mai a query_postsmeno che non sia necessario interrompere le funzionalità della pagina. Usa sempre WP_Queryo get_postsper query personalizzate :-)
Pieter Goosen

si .. hai ragione .. Può anche Wp_Query .. stesso risultato trovato ..
Jahirul Islam Mamun

C'è anche il pre_get_postsfiltro e the_post. Così tanti dettagli.
Nathan Powell

-3

puoi inserire il contenuto in una categoria X e utilizzare query_post prima mentre in questo modo:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.