Easily add one or more posts to any page using simple shortcodes. Supports categories, tags, custom post types, custom taxonomies, date ranges, post status, and much more. You can get all of the same functionality provided by this plugin by modifying your theme’s template files; this plugin just mak
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 3.0.
SourceWordPress plugins · Oct 18, 2026
01 / Source details
About this tool.
Easily add one or more posts to any page using simple shortcodes.
Supports categories, tags, custom post types, custom taxonomies, date ranges, post status, and much more.
You can get all of the same functionality provided by this plugin by modifying your theme’s template files; this plugin just makes it easy for anyone to pull posts into other areas of the site without having to get their hands dirty with code.
Plugin is depending upon your theme’s styling; version 1.x of this plugin does not contain native styles.
This is a minimal plugin, function over form. Give us feedback, suggestions, bug reports, and any other contributions on the in the plugin’s GitHub repository .
See it in action
Screenshots & previews.
Embed a shortcode into a page, and it will automatically pull in the post(s) you need.Embed shortcode using a Gutenberg shortcode block.Embed shortcodes directly in your template using do_shortcode .
02 / Source details
Getting started.
You can install from within WordPress using the Plugin/Add New feature, or if you wish to manually install:
01Download the plugin.
02Upload the entire posts-in-page directory to your plugins folder
03Activate the plugin from the plugin page in your WordPress Dashboard
04Start embedding posts in whatever pages you like using shortcodes.
Shortcode Usage
To ‘pull’ posts into a page, you can:
05place a shortcode in the editor window of the page you’re editing (Classic Editor),
06place a shortcode in a shortcode block on the page you’re editing (Gutenberg Editor),
07modify a theme template file using the shortcode in a PHP function.
Using Shortcodes in the WordPress editor
08[ic_add_posts] – Add all posts to a page (limit to what number posts in WordPress is set to), essentially adds blog “page” to page.
[ic_add_posts post_type='post_type'] – Show posts from a custom post type by specifying the post type slug (must give post type if not a standard post). Add multiple post types by separating with commas (ex. post_type='post_type1,post_type2' ).
10[ic_add_posts showposts='5'] – Limit number of posts (or override default setting).
11[ic_add_posts orderby='title' order='ASC'] – Order the post output using orderby – supports all WP orderby parameters . Order is optional, default is ‘DESC’.
12[ic_add_posts ids='1,2,3'] – Show one or many posts by specifying the post ID(s) (specify all post types).
13[ic_add_posts exclude_ids='4,5,6'] – Exclude specific post ID(s) from the query.
14[ic_add_posts category='category-slug'] – Show posts within a specific category by category slug. Separate multiple categories with commas.
15[ic_add_posts cats='2,13'] – Show posts within a specific category by category IDs. Separate multiple categories with commas.
16[ic_add_posts exclude_category='category-slug'] – Exclude posts within specific category. Uses slugs, can list multiple category slugs separated by commas.
17[ic_add_posts tag='tag-slug'] – Show posts using a specific tag. Like categories, it uses slugs, and can accommodate multiple tags separated by commas.
18[ic_add_posts tax='taxonomy' term='term'] – Limit posts to those that exist in a taxonomy and have a specific term. Both are required for either one to work and you must specify custom post_types.
19[ic_add_posts post_format='post-format-status'] – Select post formats. Use ‘post-format-‘ followed by the format type (chat, aside, video, etc.). Use comma to separate post formats. To pull all posts with the quotes format, you’d use [ic_add_posts post_format='post-format-quote'] .
20[ic_add_posts ignore_sticky_posts='no'] – Show sticky posts too (they’re ignored by default).
21[ic_add_posts paginate='yes'] – Use pagination links (off by default).
22[ic_add_posts label_next='Next' label_previous='Previous'] – Customize ‘Next’ and ‘Previous’ labels used by pagination.
23[ic_add_posts post_status='private'] – Show posts with the specified status. By default it shows only posts with ‘publish’ status. To select multiple statuses, separate them with commas like so: post_status='private,publish' .
24[ic_add_posts more_tag='Read more'] – Set the link text for read more links shown after an excerpt.
25[ic_add_posts date='today-1'] – Choose the relative date of included posts. Supports formatting like date='today-1' (today minus 1 day), date='week-2' (today minus 2 weeks), date='month-1' (today minus 1 month), date='year-1' (today minus 1 year).
26[ic_add_posts from_date='15-01-2016' to_date='31-12-2016'] – Shows posts published within a specified absolute date range.
27[ic_add_posts offset='3'] – Displays posts after the offset. An offset='3' will show all posts from the 4th one back.
28[ic_add_posts none_found='No Posts Found'] – Custom message to display when no posts are found.
29[ic_add_posts template='template-in-theme-dir.php'] – In case you want to style your markup, add meta data, etc. Each shortcode can reference a different template. These templates must exist in the theme directory or in a sub-directory named posts-in-page .
Or any combination of the above.
Shortcode Examples
Not sure how to use the shortcodes above to get what you want? Here are a few examples to get you started:
** Example 1 **
Let’s say you want to pull a specific post called “What I love about coffee” , which has a post ID of 34, somewhere on your About Us page. Your shortcode should look like this:
[ic_add_posts ids='34']
** Example 2 **
Alright, now let’s say that you want to pull in all posts from two categories into your WordPress page. One category is WordPress Rocks and the other is WordPress Rolls . Plus, you’d like to display them three per page, rather than the default number of posts. Depending on your category slugs, your shortcode should probably look like this:
Now, you’re ambitious and want to try something complex. Let’s say you’ve got a page called Plugins Are Awesome and, in it, you want to pull in posts that match the following criteria:
30posts from a custom post type called Testimonials ,
31posts that are in the Testimonial Type custom taxonomy using the term Customer ,
32you want to display six testimonials per page,
33you’d like them displayed in ascending order,
34finally, you’ve created a custom template to use in presenting these posts and named it my-posts-in-page-template.php .
If you’d like to use this plugin to pull posts directly into your theme’s template files, you can drop the following WordPress function in your template files, replacing the [shortcode] part with your, custom shortcode.
<?php echo do_shortcode("[shortcode]"); ?>
Developer Hooks
There are several hooks you can use to filter the output of your template files:
35posts_in_page_results – Filter results
36posts_in_page_args – Filter the query arguments
37posts_in_page_paginate – Filter pagination
38posts_in_page_pre_loop – Runs right before the loop (posts_loop_template.php)
39posts_in_page_post_loop – Runs right after the loop
03 / Source details
Frequently asked questions.
What is the point of this plugin?
Posts in Page makes it easy to output or embed the posts, pages, or custom post types in any page without modifying WordPress theme templates.
Does it work with Gutenberg?
Absolutely. Just use a Gutenberg Shortcode block or the Classic Edit block to add your shortcode.
Wait! The posts aren’t styled like the posts on the rest of my site.
That is likely true. Currently, Posts in Page doesn’t output any styles; just some basic markup. To change how the posts appear on the page, you’ll need to change the output template .
How do I change the output template?
Simply copy the posts_loop_template.php to your theme directory and make changes as necessary.
You can even rename it – but make sure to indicate that in the shortcode using the template='my-new-template-name.php' .
For file housekeeping, you can also create a posts-in-page folder in your theme to store all of your custom templates. It isn’t necessary to specify the posts-in-page folder in your shortcode – Posts in Page will find it automatically. You can even use multiple templates for use with different shortcodes.
Does it work with custom post types?
Absolutely.
Does it work with custom taxonomies?
You bet.
Will it make me coffee?
Not likely, but let us know if it does; then we’ll know we have something special.
How can I help?
We’d love feedback, issues, pull requests, and ideas on the Posts in Page GitHub repo .
Website LLMs.txt and LLMs-Full.txt Generator is an LLMs.txt generator and llms-full.txt generator for WordPress. It helps site owners generate, manage, preview, validate, and serve AI discovery files from published public content. Use it to create structured /llms.txt and optional /llms-full.txt end
EngageDock AI is a customizable floating contact widget for WordPress websites that want more leads and faster visitor communication. It helps small businesses turn website traffic into calls, texts, emails, and callback requests from one clean contact panel. Key Features: Click-to-Call – One tap ca
Altify AI is an auto ALT text and AI ALT text plugin for WordPress images. It helps generate descriptive image ALT text for accessibility and image SEO. Use bulk image ALT text tools for your Media Library, generate featured image ALT text automatically, and scale WooCommerce image ALT updates with
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati