Obtenha conteúdo de post de fora do loop

20

Existe uma maneira de obter o conteúdo de outro fora do loop? O ID é 302 e eu preciso mostrar o conteúdo disso em outra página.

    
por Rob 10.05.2012 / 12:44

10 respostas

36

Você pode usar get_page() para retornar o objeto $post de uma página estática:

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

Editar

Da mesma forma, você pode usar get_post() para retornar o objeto $post de uma postagem:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
    
por Chris_O 10.05.2012 / 13:15
5

para obter o conteúdo do post fora do loop, você pode escrever algo assim

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

if ( !empty( $content ) ) :
    echo $content;
endif;
    
por Aamer Shahzad 14.09.2014 / 17:40
3

Se o seu conteúdo incluir códigos de acesso, você deve usar:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
    
por DSI_ClasH 23.03.2014 / 18:29
1

Para completar, baseando-se no comentário de Tim acima e inspirado pelo artigo de Stephen Harris , a solução que permite o uso de the_content() is:

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

E, portanto, os filtros são aplicados (os parágrafos serão inseridos etc.) e os códigos de acesso funcionam.

    
por Jon 23.05.2014 / 09:07
0

Como você conhece o seu ID de postagem de destino (302), pode achar útil essa sintaxe abreviada que pode ser usada fora do loop (embora seu desempenho seja praticamente o mesmo de qualquer outro método alternativo:)

echo(get_post_field('post_content',302));
    
por E. Serrano 24.06.2015 / 23:26
0

Você pode usar a função get_post_data() para obter postagens fora do loop. Coloque este código em functions.php

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

e adicione este snippet para mais controle sobre o 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
?>
    
por Zohair Baloch 08.02.2016 / 16:57
0

Você pode usar, como dito, a solução com get_post e $post_object->post_content , mas não se esqueça de adicionar uma marca antes de usar o objeto 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 );
    
por Olga Farber 01.03.2017 / 08:22
-1

Você pode simplesmente chamar get_the_content (postId)

<?php echo get_the_content($postId); ?>
    
por NiemBlackPine 20.04.2016 / 21:43
-2

use wp_reset_postdata(); ele irá funcionar .. (editado)

<?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 pode ser "post", "page" ou seu tipo de postagem personalizado. Aqui p = 302 é o seu ID do post .. Espero que funcione.

    
por Jahirul Islam Mamun 04.04.2015 / 08:20
-3

você pode colocar o conteúdo em uma categoria X e usar o query_post antes, assim:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
    
por Zakaria Elhariri 10.05.2012 / 13:20