Risposte:
get_page()
per restituire l' $post
oggetto di una pagina statica:$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;
Allo stesso modo, puoi usare get_post()
per restituire l' $post
oggetto di un post:
$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
setup_postdata( $post );
prima, dopo di che, si può usarethe_content();
apply_filters( 'the_content', $post_object->post_content );
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;
Se il contenuto include codici brevi, è necessario utilizzare:
$post_id = 22;
$post_object = get_post( $post_id );
echo do_shortcode( $post_object->post_content );
do_shortcode
altro 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 .
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.
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));
È 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
?>
Puoi usare, come detto, la soluzione con get_post
e $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 );
Puoi semplicemente chiamare get_the_content (postId)
<?php echo get_the_content($postId); ?>
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.
query_posts
meno che non sia necessario interrompere le funzionalità della pagina. Usa sempre WP_Query
o get_posts
per query personalizzate :-)
pre_get_posts
filtro e the_post
. Così tanti dettagli.
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; ?>
get_queried_object_id()
! developer.wordpress.org/reference/classes/wp_query/…