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