Wordpress: include content of one page in another

How do I include the page content of one or more page in another page?

ex. I have pageA, pageB and pageC and I want to include the contents of these pages in pageX

is there a wordpress function that loads the post of a specified page/post? like show_post("pageA")??

Answers


Hi @dany:

There is not a show_post() function per se in WordPress core but it is extremely easy to write:

function show_post($path) {
  $post = get_page_by_path($path);
  $content = apply_filters('the_content', $post->post_content);
  echo $content;
}

Note that this would be called with the page's path, i.e.:

<?php show_post('about');  // Shows the content of the "About" page. ?>
<?php show_post('products/widget1');  // Shows content of the "Products > Widget" page. ?>

Of course I probably wouldn't name a function as generically as show_post() in case WordPress core adds a same-named function in the future. Your choice though.

Also, and no slight meant to @kevtrout because I know he is very good, consider posting your WordPress questions on StackOverflow's sister site WordPress Answers in the future. There's a much higher percentage of WordPress enthusiasts answering questions over there.

Hope this helps.

-Mike


Pages are just posts, with a post_type of 'page' in the database. You can show the content of multiple pages on another page by writing a post query in your pageX template that gets the posts you specify and output them in a Loop.

There are three ways to get post content from the database:

  1. get_posts
  2. query_posts
  3. WP_Query

These links all point to the WordPress Codex. Get_posts and query_posts have an argument available, 'page_id', where you can specify the id of the page you'd like to retrieve and display.


I found this answer posted on the Wordpress forums. You add a little code to functions.php and then just use a shortcode whenever you like.

function get_post_page_content( $atts ) {
        extract( shortcode_atts( array(
            'id' => null,
            'title' => false,
        ), $atts ) );

        $the_query = new WP_Query( 'page_id='.$id );
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
                if($title == true){
                the_title();
                }
                the_content();
        }
        wp_reset_postdata();

    }
    add_shortcode( 'my_content', 'get_post_page_content' );

For the shortcode,

[my_content id="Enter your page id number" title=Set this to true if you want to show title /]

You could install a Plugin "Improved Include Page". Once installed, you create page X and enter:

[include-page id="123"]
[include-page id="124"]
[include-page id="125"]

where these are the ID's of pages A, B and C respectively


<?php query_posts('p=43');

global $more;
//set $more to 0 in order to only get the first part of the post
$more = 0; 

    // the Loop
    while (have_posts()) : the_post(); 

     // the content of the post ?>
    the_title();
    the_content(); 

    endwhile; ?>

This is obviously a portion of the post, I got the detail from the wordpress codex.


Interesting... I looked around for how to embed Wordpress content elsewhere (as in, on another website), and found some things...

  • www . shooflydesign.org/buzz/past/embedding_wordpress . html
    • Shows how to embed Wordpress content in another site with a php script; maybe just use the same thing to embed Wordpress into itself?
  • www . corvidworks . com/articles/wordpress-content-on-other-pages
    • Similar concept; embed Wordpress on another page; just try to use that tool in a new WP post
  • feeds themselves
    • My searching pulled up some suggestions to just use a feed to your own blog to embed into a post. There's nothing preventing that. You might want it automated and so restructuring the feed to look right might be problematic, but it's worth a shot depending on what you want to do.

Hope those are quasi-helpful. While they all are solutions for getting your WP content on some place other than WP... they might work for your given question and allow you to display A, B, and C on X.


There is a Wordpress function to display the content of a particular page inside another using query_posts() it is:

<?php query_posts("posts_per_page=1&post_type=page&post_id=134"); the_post(); ?>

You set the number of pages to be displayed to 1, post type is page instead of post and the page id


Kit Johnson's wordpress forum solution with creating a shortcode works, but adds the inserted page in the top of the new page, not where the shortcode was added. Close though, and may work for other people.

from the wordpress post, I pieced together this which inserts the page where the shortcode is put:

function get_post_page_content( $atts ) {
    extract( shortcode_atts( array(
        'id' => null,
        'title' => false,
    ), $atts ) );
    $output = "";       

    $the_query = new WP_Query( 'page_id='.$id );
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
            if($title == true){
            $output .= get_the_title();
            }
            $output .= get_the_content();
    }
    wp_reset_postdata();
    return $output;

}

Then, the shortcode bit works as expected. If you don't want the title, title=false does not work, you need to leave title off entirely.


Need Your Help

Paypal X - adaptive payments - what is this?

paypal

I'm a little confused, all these different types of product and it sounds like it will do all the same thing? Can someone please explain to me in plain english what are the differences between these

Zoomable, Google-Finance-style time series graph in D3 or Rickshaw?

javascript graph charts d3.js zoom

I want to create a time series line graph in D3, with a smaller version of the graph below that allows the user to zoom in on certain sections of the chart, like a Google Finance graph.