This plugin adds two shortcodes that allow you to display either the content of a post or a list of posts within the content area of a post. This plugin should be fully compatible with all post types, as it simply uses the get_post()
and get_posts()
WordPress functions.
Post Content
The first shortcode is the [post-content]
shortcode. Using that shortcode will allow you to display the content of one post within another post. This shortcode requires a single attribute with a key of "id". To use this shortcode to display the content of a post or page with an ID of 25, you would use this shortcode like [post-content id=25]
. This shortcode also accepts the following optional arguments:
- post_name => null - The slug of the post that you want to pull. This can be used in place of the
id
attribute - show_image => false - Determines whether or not to display the featured image (if so, this appears before the content)
- show_excerpt => false - Determines whether to default to showing the post excerpt instead of the post content (still falls back to post content if the excerpt is not set)
- excerpt_length => 0 - If you would like to limit the length of the content/excerpt shown on the page, specify the maximum number of words that should be shown (a read more link will automatically be appended to any entries that exceed that limit).
- image_width => 0 - The width, in pixels, to which the featured image should be sized
- image_height => 0 - The height, in pixels, to which the featured image should be sized
- show_title => false - Whether or not to show the post title at the top of the content. By default, the title is wrapped in
<h2>
tags, but you can use thepost-content-shortcodes-title
filter to modify the title output.
Post List
The second shortcode is the [post-list]
shortcode. This shortcode does not require any arguments, but will accept the following arguments (most of which are the default arguments used with get_posts()
):
- numberposts => -1
- offset => 0
- category => null (can accept category slug [with quotes] or category ID [without quotes])
- orderby => title
- order => asc
- include => null
- exclude => null
- meta_key => null
- meta_value => null
- post_type => 'post'
- post_mime_type => null
- post_parent => null
- post_status => 'publish'
- exclude_current => true
- ~~blog_id => 0 (the numeric ID of the site from which to pull the posts)~~
- blog => null (can be set to the numeric ID or the blog name [slug] of the site from which to pull the posts - this replaces the old blog_id attribute)
- show_image => false
- show_excerpt => false
- excerpt_length => 0
- image_width => 0
- image_height => 0
- shortcodes => false (determines whether the plugin should attempt to allow shortcodes to be processed within the excerpt/content)
The first 13 arguments are standard arguments for the get_posts()
function.
The exclude_current
argument is not a standard argument for the get_posts()
function. It is a custom argument for this plugin. When that argument is set to true
, the current page or post will be excluded from the list of posts. If it is set to false
, "false"
or 0
, the current page or post will be included in the post list.
The blog_id
argument is also not standard. That argument allows you to pull a post from a site other than the current site when using WordPress multisite. Simply set that argument to the ID of the site from which you want to pull the post, and the post with the id
you specify will be pulled from the blog/site with the blog_id
you specify.
The show_image
, image_width
and image_height
arguments only apply to the post-list
shortcode. They determine whether to display the featured image and how to display it for each post within the list. If the image_width
and image_height
arguments are both set to 0 (which is the default), the "thumbnail" size will be used (assuming the show_image
argument is set to 1 or "true"). If only one of the image_width
or image_height
arguments are set, the other argument will be set to 999999 to ensure that the specified dimension is met.
The 'show_excerptand
excerpt_lengtharguments also apply to the post-list shortcode. If you set
show_excerptto 1 or "true", the post excerpt will be shown if it exists. If it doesn't exist (or is empty), the post content will be shown (with HTML stripped out of it). You can truncate the length of the excerpts that are shown in the post list by setting the
excerpt_lengthvalue. The
excerpt_lengthis measured in words, so if you would like each excerpt to display no more than 50 words, you would set the
excerpt_lengthparameter to 50. If you leave it set to 0 (which is the default), the entire excerpt or content will be shown in the post list. In the
post-listshortcode, if
show_excerptis set to 0 or false, no content will be shown in the list (as opposed to the behavior of the
show_excerptparameter in the
post-content` shortcode).
To read more about the other arguments, please visit the codex page for the get_posts()
function.
If you are looking to display a list of attachments in a post, rather than displaying a list of posts or pages, you might want to check out the List Attachments Shortcode plugin instead.
Multisite - Pulling Posts From Another Blog
To pull a list of posts from another blog, simply provide the blog's ID as the blog_id
argument in the shortcode. With that argument, this plugin will pull a list of posts that match the other criteria you provided. If the blog_id
argument is provided, and the blog_id
doesn't match the ID of the current blog, the exclude_current
argument will be ignored (otherwise, this plugin would automatically exclude whatever post on the other blog happens to have the same ID as the current post).
When the list is displayed, shortlinks (that blog's URL with ?p=[post_id]
) will be used, rather than the proper permalink, since it would require a lot more resources to build the proper permalink.
The usage would look something like:
[post-list blog_id=12 post_type="page"]
When displaying a post list, you can use any post_type
that is registered on that blog (that post_type does not have to be registered on the current site).
To display the content of a single post from another blog, again, simply provide the blog's ID as the blog_id
argument. That will pull the content of that post. Unfortunately, at this time, there is no way to invoke all of the plugins from the blog from which you're pulling the content, so any shortcodes, filters, etc. that may be active on the source blog will not be parsed when the content is displayed on the current blog. Obviously, if all of the same plugins and themes are active (or, if any plugins/themes that introduce shortcodes and filters are active) on both the source blog and the current blog, then there is nothing to worry about.
The usage would look something like:
[post-content blog_id=12 id=25]
That would pull the content for the post with an ID of 25 from the blog with an ID of 12.