Insert Pages

外掛說明

Insert Pages lets you embed any WordPress content (e.g., pages, posts, custom post types) into other WordPress content using the Shortcode API. It also includes a widget for inserting pages into any widget area.

The real power of Insert Pages comes when you start creating custom post types, either programmatically in your theme, or using another plugin like Custom Post Type UI. You can then abstract away common data types (like videos, quizzes, due dates) into their own custom post types, and then show those pieces of content within your normal pages and posts by Inserting them as a shortcode.

Here are two quick example use cases:

Normal Use

Say you teach a course and you’re constantly referring to an assignment due date in your course website. The next semester the due date changes, and you have to go change all of the locations you referred to it. Instead, you’d rather just change the date once! With Insert Pages, you can do the following:

Create a custom post type called Due Date.

Create a new Due Date called Assignment 1 Due Date with Fri Nov 22, 2013 as its content.

Edit all the pages where the due date occurs and use the Insert Pages toolbar button to insert a reference to the Due Date you just created. Be sure to set the Display to Content so Fri Nov 22, 2013 shows wherever you insert it. The shortcode you just created should look something like this: [insert page='assignment-1-due-date' display='content']

That’s it! Now, when you want to change the due date, just edit the Assignment 1 Due Date custom post you created, and it will automatically be updated on all the pages you inserted it on.

Advanced Use

Say your site has a lot of video content, and you want to include video transcripts and video lengths along with the videos wherever you show them. You could just paste the transcripts into the page content under the video, but then you’d have to do this on every page the video showed on. (It’s also just a bad idea, architecturally!) With Insert Pages, you can use a custom post type and create a custom theme template to display your videos+transcripts+lengths just the way you want!

Create a custom post type called Video.

Use a plugin like Advanced Custom Fields to add extra fields to your new Video custom post type. Add a Video URL field, a Transcript field, and a Video Length field.

Create a new Video called My Awesome Video with the following values in its fields:

Video URL: http://www.youtube.com/watch?v=oHg5SJYRHA0

Transcript: We’re no strangers to love, You know the rules and so do I…

Video Length: 3:34

Create a template in your theme so we can display the video content as we want. I won’t cover this step here since it’s pretty involved, but you can find more help in the WordPress Codex. Let’s assume you created a template called Video with transcript (video-with-transcript.php) that shows the youtube video in a fancybox, and includes a button that shows the text transcript when a user clicks on it.

Edit the pages where you want the video to show up and use the Insert Pages toolbar button to insert a reference to the Video you just created. Be sure to set the Display to Use a custom template, and select your new template Video with transcript. The shortcode you just created should look something like this: [insert page='my-awesome-video' display='video-with-transcript.php']

That’s it! Now you can create all sorts of video content and know that it’s being tracked cleanly in the database as its own custom post type, and you can place videos all over your site and not worry about lots of duplicate content.

The possibilities are endless!

螢幕擷圖

Insert Pages toolbar button.

Insert Pages browser.

Insert Pages shortcode example.

安裝方式

Upload “insert-pages” to the “/wp-content/plugins/” directory.

Activate the plugin through the “Plugins” menu in WordPress.

Use the toolbar button while editing any page to insert any other page.

常見問題集

How do I limit the list of pages in the dialog to certain post types?

You can hook into the ‘insert_pages_available_post_types’ filter to limit the post types displayed in the dialog. Here’s an example filter that just shows Posts:

Just one! The plugin prevents you from embedding a page in itself, but you can totally create a loop that will prevent a page from rendering. Say on page A you embed page B, but on page B you also embed page A. As the plugin tries to render either page, it will keep going down the rabbit hole until your server runs out of memory. Future versions should have a way to prevent this behavior!

3.2.9

Note: If you need to use arrays in your querystring variables, use braces {} instead of brackets [], since WordPress shortcodes cannot have brackets inside them. The plugin will convert the braces internally. Example: querystring=’foo[]=bar&foo[]=baz’

3.2.8

Add support for inserting pages/posts built with Elementor.

3.2.7

Add insert_pages_override_display filter so site admins can enforce a specific display on all inserted pages.

3.2.2

Add configurable option to load TinyMCE filter in a different location to support SiteOrigin PageBuilder users.

Fix missing JS on front-end ACF forms with WYSIWYG editors.

3.2.1

Revert TinyMCE filter move for SiteOrigin PageBuilder since it breaks compatibility with Divi theme. Instead, hook into the filter multiple times, and make sure the Insert Pages button is registered each time. Props @trevorp for the report.

3.2.0

Fix for toolbar button disappearing when the SiteOrigin PageBuilder Widgets Bundle plugin is enabled. Props @JarkkoLaine for figuring that one out! Ref: https://wordpress.org/support/topic/button-in-the-toolbar-of-tinymce-disappear-conflict-page-builder/

3.1.9

Support shortcode_atts_insert filter for filtering the shortcode’s default attributes. Props @gtrout for the pull request!

3.1.8

Fix for widget being used in the Beaver Builder widget interface.

3.1.7

Plugin is now translatable (internationalization). Props @maxgx for getting the ball rolling and creating a translation.

3.1.6

Fix for TinyMCE toolbar button not appearing for authors and contributors. Props @fernandosalvato for the report.

Fix for deprecation warning in PHP 7. Props @christer_f for the report.

3.1.5

Fix for php warning when inserting page outside of The Loop while using Beaver Builder. Props @jeffreytanuwidjaja for the report.

3.1.4

Compatibility for for php versions lower than 5.3. Replace closure with create_function().

3.1.3

Prevent menu items and page attachments from being insertable; this fixes problems with inserting pages via slug when there is a menu item with the same slug as a page/post. Props @k7f7 for tracking this one down!

3.1.2

Fix for custom template dropdown not enabling when configuring the widget on the theme customizer page (customize.php). Props @aassouad for finding this!

3.1.1

Fix: Add compatibility for PHP 5.2 in the widget registration code. See https://codex.wordpress.org/Widgets_API

3.1

Feature: Insert Page widget. Go to Appearance > Widgets to add the Insert Page widget to any of your widget areas. Specify a page slug or ID in the widget, and that page will get displayed in the widget area.

3.0.2

Hotfix: Inserting posts with custom paths using legacy insert method.

3.0.1

Hotfix: Version 3 broke some plugin compatibility (most notably with Beaver Builder and Page Builder by SiteOrigin). This update should restore functionality.

2.9.1

2.9

Add filter for altering the markup generated by Insert Pages. This filter is used internally at priority 10, so if you want to modify $content, do it earlier (priority 1-9); if you want to reconstruct the generated markup using the supplied parameters, do it after (priority 11+). Props @heiglandreas!

2.8

Feature: Add options page with option to insert page IDs instead of page slugs (users of WPML will need this feature if translated pages all share the same page slug).

2.7.1

Add filter to show a message when an inserted page cannot be found. Example usage:
function theme_init() {
// Show a message in place of an inserted page if that page cannot be found.
add_filter( ‘insert_pages_not_found_message’, function ( $content ) { return ‘Page could not be found.’; } );
}
add_action( ‘init’, ‘theme_init’ );

2.7

Fix: Prevent Insert Pages from breaking tinymce if wp_editor() is called outside of an admin context.

2.6

Fix: Query data wasn’t getting reset properly when viewing a category archive containing a post with an inserted page, causing date and author information in post footers in the twentyfifteen theme to show incorrect information. This has been resolved.