20

Is there a way to get the content from another outside the loop? The ID is 302 and I need to display the content of that on another page.

10 Answers 10

37

You can use get_page() to return the $post object of a static page:

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

Edit

Similarly, you can use get_post() to return the $post object of a post:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
  • Do shortcodes still work when using this? – Tim Baas Feb 20 '14 at 21:35
  • Just found out it doesn't. Use setup_postdata( $post ); first, after that, you can use the_content(); – Tim Baas Feb 20 '14 at 21:39
  • 3
    You could just run apply_filters( 'the_content', $post_object->post_content ); – Nathan Powell Mar 1 '17 at 7:30
6

to get the content of the post outside the loop you can write something like this

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

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

If your content include shortcodes, you should use:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
  • Don't do shortcode kovshenin.com/2013/dont-do_shortcode – Brad Dalton Jun 24 '15 at 21:52
  • That page doesn't provide a compelling reason to avoid do_shortcode other than saying, "It might be slow" and "You can just use the function that the short code calls." Those reasons are only valid for the most trivial for the most simple scenarios. It fails when the shortcode is generated somewhere else, or if there are multiple shortcodes, or shortcodes mixed in with other content and markup. Without a compelling reason, I would disagree with the statement to avoid do_shortcode. This smells like premature optimization. – Jeff Apr 17 '17 at 21:35
  • And it also increases the coupling between your code and the original shortcode's code. If the shortcode's backing method is ever renamed or the signature changes, your code will break. – Jeff Apr 17 '17 at 21:37
1

For completeness, building on Tim's comment above and inspired by Stephen Harris's article, the solution that enables use of the_content() is:

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

And hence filters get applied (paragraphs will be inserted etc.) and shortcodes work.

  • This almost crashed my browser :/ taking out the ampersand helps, but it's still not parsing shortcodes. – Zade Oct 5 '15 at 8:12
0

Since you know your target post ID (302), you may find useful this shorthand syntax that you can use out of the loop (though its performance is pretty much the same as in any other alternative method:)

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

You can use the get_post_data() function to get post outside the loop. Place this code in functions.php

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

and then add this snippet for more control on the process

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

You can use, as said, the solution with get_post and $post_object->post_content, but don't forget to add a check before you use that post object:

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 );
-1

You can simply call get_the_content(postId)

<?php echo get_the_content($postId); ?>
-2

use wp_reset_postdata(); it will work.. (edited)

<?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 can be "post" , "page" or your custom post type. Here p=302 is your post id.. Hope it will work.

  • 2
    Never use query_posts unless you need to break page functionalities. Always use WP_Query or get_posts for custom queries :-) – Pieter Goosen Apr 4 '15 at 6:55
  • yes.. you are right.. It can Wp_Query as well.. same result found.. – Jahirul Islam Mamun Apr 5 '15 at 19:23
  • There is also the pre_get_posts filter, and the_post. So much detail. – Nathan Powell Mar 1 '17 at 7:35
-3

you can put content in a category X and use query_post before while like this :

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.