Réponses:
get_page()
pour renvoyer l' $post
objet d'une page statique:$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;
De même, vous pouvez utiliser get_post()
pour renvoyer l' $post
objet d'un message:
$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
setup_postdata( $post );
abord, après cela, vous pouvez utiliserthe_content();
apply_filters( 'the_content', $post_object->post_content );
pour obtenir le contenu du message en dehors de la boucle, vous pouvez écrire quelque chose comme ça
global $post;
$content = $post->post_content;
if ( !empty( $content ) ) :
echo $content;
endif;
Si votre contenu comprend des shortcodes, vous devez utiliser:
$post_id = 22;
$post_object = get_post( $post_id );
echo do_shortcode( $post_object->post_content );
do_shortcode
autre chose que de dire: «Cela pourrait être lent» et «Vous pouvez simplement utiliser la fonction appelée par le code court». Ces raisons ne sont valables que pour les plus triviales pour les scénarios les plus simples. Il échoue lorsque le shortcode est généré ailleurs, ou s'il existe plusieurs shortcodes, ou des shortcodes mélangés à d'autres contenus et balises. Sans raison impérieuse, je ne suis pas d'accord avec la déclaration à éviter do_shortcode
. Cela sent comme une optimisation prématurée .
Pour être complet, en s'appuyant sur le commentaire de Tim ci-dessus et inspiré par l'article de Stephen Harris , la solution qui permet l'utilisation de the_content()
est:
$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );
Et donc les filtres sont appliqués (des paragraphes seront insérés, etc.) et les shortcodes fonctionnent.
Puisque vous connaissez votre ID de publication cible (302), vous pouvez trouver utile cette syntaxe abrégée que vous pouvez utiliser hors de la boucle (bien que ses performances soient à peu près les mêmes que dans toute autre méthode alternative :)
echo(get_post_field('post_content',302));
Vous pouvez utiliser la get_post_data()
fonction pour sortir le post de la boucle. Placez ce code dans functions.php
function get_post_data($postId) {
global $wpdb;
return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}
puis ajoutez cet extrait pour plus de contrôle sur le processus
<?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
?>
Vous pouvez utiliser, comme indiqué, la solution avec get_post
et $post_object->post_content
, mais n'oubliez pas d'ajouter une vérification avant d'utiliser cet objet de publication:
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 );
Vous pouvez simplement appeler get_the_content (postId)
<?php echo get_the_content($postId); ?>
utiliser wp_reset_postdata();
cela fonctionnera .. (édité)
<?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 peut être "post", "page" ou votre type de publication personnalisé. Ici p = 302 est votre identifiant de publication. J'espère que cela fonctionnera.
query_posts
sauf si vous avez besoin de casser les fonctionnalités de la page. Utilisez toujours WP_Query
ou get_posts
pour des requêtes personnalisées :-)
pre_get_posts
filtre, et the_post
. Tant de détails.
vous pouvez mettre du contenu dans une catégorie X et utiliser query_post avant tout comme ceci:
<?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/…