How to embed page content in a blog post

I’ve built an HTML table that is posted on a page in my site, and I’d like to use that same content inside a blog post (something of an announcement of the table’s publication). The table is likely to get updated from time to time, so I’d like to have a single source for maintenance purposes.

Is there a way I can do a one-off embedding of the table’s source into the blog post, so that it is always updated when the page is updated? This isn’t expected to happen often, so I don’t want to put a lot of elbow grease into making this work.

Thanks in advance!

EDIT

SO I made a really short shortcode solution using http://wordpress.org/extend/plugins/shortcode-exec-php/

extract(shortcode_atts(array('arg' => 'default'), $atts));
$id = 2328;
$post = get_post( $id );
return apply_filters('the_content', $post->post_content );

Thanks to everyone who helped. I don’t have rep to upvote answers, but i will when I get more points.

3 Answers
3

Create a shortcode to embed the content. This will always be synchronized.

Sample code from an older project. Just updated. 🙂

GitHub: https://gist.github.com/3380118 · This post in German (auf Deutsch) on my blog.

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Embed Post Shortcode
 * Description: Embed any page, post or custom post type with shortcode.
 * Plugin URI:  http://wordpress.stackexchange.com/q/62156/73
 * Version:     2012.08.17
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 *
 * T5 Embed Page Shortcode, Copyright (C) 2012 Thomas Scholz
 */

add_shortcode( 'embed_post', 't5_embed_post' );

/**
 * Get a post per shortcode.
 *
 * @param  array $atts There are three possible attributes:
 *         id: A post ID. Wins always, works always.
 *         title: A page title. Show the latest if there is more than one post
 *              with the same title.
 *         type: A post type. Only to be used in combination with one of the
 *              first two attributes. Might help to find the best match.
 *              Defaults to 'page'.
 * @return string
 */
function t5_embed_post( $atts )
{
    extract(
        shortcode_atts(
            array (
                'id'    => FALSE,
                'title' => FALSE,
                'type'  => 'page'
            ),
            $atts
        )
    );

    // Not enough input data.
    if ( ! $id and ! $title )
    {
        return;
    }

    $post = FALSE;

    if ( $id )
    {
        $post = get_post( $id );
    }
    elseif( $title )
    {
        $post = get_page_by_title( $title, OBJECT, $type );
    }

    // Nothing found.
    if ( ! $post )
    {
        return;
    }

    return apply_filters( 'the_content', $post->post_content );
}

Just make sure not to embed two posts vice versa.

Leave a Comment