Obtenez du contenu de publication en dehors de la boucle

Réponses:

39

Vous pouvez utiliser get_page()pour renvoyer l' $postobjet d'une page statique:

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

modifier

De même, vous pouvez utiliser get_post()pour renvoyer l' $postobjet d'un message:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
Chris_O
la source
Les shortcodes fonctionnent-ils toujours lorsque vous les utilisez?
Tim Baas
Je viens de découvrir que non. Utilisez d' setup_postdata( $post );abord, après cela, vous pouvez utiliserthe_content();
Tim Baas
4
Vous pourriez simplement courirapply_filters( 'the_content', $post_object->post_content );
Nathan Powell
6

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;
Aamer Shahzad
la source
3

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 );
DSI_ClasH
la source
Ne faites pas de shortcode kovshenin.com/2013/dont-do_shortcode
Brad Dalton
Cette page ne fournit pas de raison impérieuse d'éviter do_shortcodeautre 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 .
Jeff
Et cela augmente également le couplage entre votre code et le code du shortcode d'origine. Si la méthode de sauvegarde du shortcode est renommée ou que la signature change, votre code se cassera.
Jeff
1

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.

Jon
la source
Cela a failli planter mon navigateur: / La suppression de l'esperluette aide, mais ce n'est toujours pas l'analyse des shortcodes.
Zade
0

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));
E. Serrano
la source
0

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
?>
Zohair Baloch
la source
0

Vous pouvez utiliser, comme indiqué, la solution avec get_postet $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 );
Olga Farber
la source
-1

Vous pouvez simplement appeler get_the_content (postId)

<?php echo get_the_content($postId); ?>
NiemBlackPine
la source
2
En fait, ce n'est pas possible. Premier argument il y a pour le contenu quand il y a plus de lien: codex.wordpress.org/Function_Reference/get_the_content
joshcanhelp
-2

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.

Jahirul Islam Mamun
la source
2
N'utilisez jamais query_postssauf si vous avez besoin de casser les fonctionnalités de la page. Utilisez toujours WP_Queryou get_postspour des requêtes personnalisées :-)
Pieter Goosen
oui .. vous avez raison .. Il peut aussi bien Wp_Query .. même résultat trouvé ..
Jahirul Islam Mamun
Il y a aussi le pre_get_postsfiltre, et the_post. Tant de détails.
Nathan Powell
-3

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; ?>
Zakaria Elhariri
la source