Content Blocks (Custom Post Widget)


The Content Blocks allows you to display the contents of a specific custom post in a widget on in the content area using a shortcode.

Even though you could use the text widget that comes with the default WordPress install, this plugin has some major benefits:

  • The Content Blocks plugin enables users to use the WYSIWYG editor for editing the content and adding images.
  • If you are using the standard WordPress text widgets to display content on various areas of your template, this content can only be edited by users with administrator access. If you would like non-administrator accounts to modify the widget content, you can use this plugin to provide them access to the custom posts that provide the content for the widget areas.
  • You can even use the featured image functionality to display them in a widget.
  • The Content Blocks plugin is compatible with the WPML Multi-Language plugin and automatically shows the correct language in the widget area.
  • The Content Blocks can be included in posts and pages using the built-in shortcode functionality.

This plugin creates a ‘content_block’ custom post type. You can choose to either display the title on the page or use it to describe the contents and widget position of the content block. Note that these content blocks can only be displayed in the context of the page. I have added ‘public’ => false to the custom post type which means that it is not accessible outside the page context.

To add content to a widget, drag it to the required position in the sidebar and select the title of the custom post in the widget configuration.

Includes the following translations:

More translations are very welcome!


  • After activating the plugin a new post type called ‘Content Blocks’ is added.
  • The widget has a select box to choose the content block. Click on the ‘Edit Content Block’ link to edit the selected Content Block custom post.
  • You will find a button above the WYSIWYG editor that allows you to insert the content block using the shortcode.
  • After clicking the ‘Add Content Block’ button you can select a content block and insert the shortcode in the content area.


  1. First you will have to upload the plugin to the /wp-content/plugins/ folder.
  2. Then activate the plugin in the plugin panel.
    You will see that a new custom post type has been added called Content Block.
  3. Type some content for the widget. You can choose to either use the title to describe the content on the page, or to display it. Check ‘Show Post Title’ to display the title on the page.
  4. Go to ‘Appearance’ > ‘Widgets’ and drag the Content Block widget to the required position in the sidebar.
  5. Select a Content Block from the drop-down list.
  6. Check the ‘Show Post Title’ checkbox if you would like to display the title of your Content Block
  7. If you are experiencing issues with content being added automatically to your posts (Social media sharing buttons for instance), check the ‘Do not apply content filters’ checkbox. Use this with caution!
  8. Click save.


Why can’t I use the default text-widget?

Of course you can always use the default text widget, but if you prefer to use the WYSIWYG editor or if you have multiple editors and you don’t want to give them administrator rights, it is recommended to use this plugin.

How can I show the content bock on a specific page?

It is recommended to install the Widget Logic plugin, this will give you complete flexibility on widget placement.

How can I display the featured image in the widget?

This plugin has built-in support for the featured image functionality on the edit screen. Note that featured image will not be resized, so you will have to make sure it is the right size when uploading or restrict the image size via the stylesheet.

My social sharing plugin adds buttons to all the Content Block areas

If your social media sharing plugin adds buttons to the widget areas you could check the ‘Do not apply content filters’ checkbox. Note that when this is done, WordPress will also stop adding paragraph tags to your text, so use this setting with caution. It is much better to ask the developer of the social media sharing buttons plugin to correctly use the content filters (see for more information on this). If you are embedding your content block with the shortcode, add the following: suppress_content_filters="yes"

The featured image is not displayed when using the shortcode

Currently the shortcode function only outputs the post content and title of the content block, future support for displaying the attached featured image is being considered.

Can I change the output of the content blocks?

Yes, you can create your own template for the content blocks, you can do so by adding a file named custom-post-widget.php to your theme folder. More information about this can be found in this support topic

In these Gists you can find examples of templates for shortcodes and for widgets

I have a feature request

Please post your feature request on the support forum
These new features are on the to-do list:

  • Display the content block featured image when using the shortcode
  • Front-end editing of the content blocks
  • Visual Composer integration
  • Show the shortcode on the “View all Content Blocks” list view

How can I make advanced changes to the widget layout?

You can create your own widget template and upload this to your theme folder. See this support topic for more information about this feature.

Can I make the post type public?

You can make the post type public by adding the following code to your theme’s functions.php file:
function filter_content_block_init() {
$content_block_public = true;
return $content_block_public;

Alternatively you can use this third-party plugin.

Post ID’s confuse me, can I use the post slug for embedding a content block?

Yes, v2.6 now gives you the option to use the content block’s url slug in the shortcode. Use the following syntax for doing this: [content_block slug=my-content-block].
Note that if you ever change the slug of a content block, the embedding no longer works. Therefore I recommend using the post ID instead (which never changes).

Can I specify a custom class for the embedded content blocks?

By default the shortcode adds a div around the content block with the class content_block. If you like, you can change this class by adding it to the shortcode: [content_block id=198 slug=our-wordpress-plugins class=my-class]

How can I embed a content block in my template file using php code?

You can use the do_shortcode function for this: echo do_shortcode('[content_block id= ]');

See for more information on this function.

The plugin is not working for me

Please create a support topic in the forum:

I love your plugin! What can I do to help?

Creating and supporting this plugin takes up a lot of my free time, therefore I would highly appreciate it if you could take a couple of minutes to write a review. This will help other WordPress users to start using this plugin and keep me motivated to maintain and support it. Also, if you have a twitter, Facebook or Google+ account, it would be fantastic if you could share the link to this plugin!


2023 年 10 月 26 日
Out of the box this tool is great to manage content. But the ability to use your own template part is where its versatility shines and allows for endless possibilities. Thanks for a great plugin.
2023 年 2 月 24 日
An essential tool for our website. This is so useful it should be a standard on every Wordpress site. Easy to use and works perfectly every time.
閱讀全部 77 則使用者評論


以下人員參與了開源軟體〈Content Blocks (Custom Post Widget)〉的開發相關工作。


〈Content Blocks (Custom Post Widget)〉外掛目前已有 10 個本地化語言版本。 感謝全部譯者為這個外掛做出的貢獻。

將〈Content Blocks (Custom Post Widget)〉外掛本地化為台灣繁體中文版


任何人均可瀏覽程式碼、查看 SVN 存放庫,或透過 RSS 訂閱開發記錄



WP 6.6 compatibility tested and confirmed


Changed constants for theme folder to use get_stylesheet_directory() and get_template_directory().


Changes to the shortcode function that allows for loading of a custom template file and the function that allows you to use a custom tag to wrap the content block and title. Note that this could cause issues if you are using a template that is not in your template folder.


WP 6.5 compatibility tested and confirmed


Fix for stripped html tags when using the suppress_content_filters option on the shortcode. As reported in the support forums:


Added input sanitization on the shortcode arguments to prevent potential security issues.


Fix for PHP 8.1 notice passing null to parameter #1 ($datetime) of type string is deprecated


WP 6.3 compatibility tested and confirmed


WP 5.8 compatibility tested and confirmed


Bugfix for notice in shortcode.php


Thanks to Bruce from Ingeni Web Solutions it is now possible to use your own template for embedding the custom post shortcode.


Compatibility testing. Also tested on PHP8 and found no issues.


Spanish translation added and readme.txt file updates.


Minor bugfix and upgrade for the clipboard.js script. Thanks to for reporting this!


You can now use a custom html tag to wrap the content block when using a shortcode. See for more information and usage.


Added Gutenberg compatibility for editing content blocks. This is for editing content blocks only. There is no block button yet for inserting a content block in the Gutenberg editor, so you will have to choose the ‘Shortcode’ widget and insert your content block shortcode there.


Added the option to show the featured image in when using the shortcode. Add featured_image=yes to the shortcode to show it: [content_block featured_image=yes]. By default the medium image size is displayed, you can change it like this: [content_block featured_image=yes featured_image_size=full].


Tested for WordPress 4.8 compatibility.


Added html sanitizing to the Content Block post titles. Thanks to @palpatine1976 for bringing this to my attention.


Renamed the plugin to Content Blocks to better reflect the purpose.


Minor layout change to the Shortcodes meta box.


Removed the admin notice, added donation link to plugin overview page. Shortcodes are now displayed on the content block edit screen, thanks to Remkus for suggesting this feature.


Fix for minor compatibility issue when using the Slider Revolution plugin


You can now optionally show the post title when using the shortcode by adding title=yes to the shortcode


Added Hebrew translation as provided by Daniel Cohen Gindi


Updated language files.


Added the option to suppress the content filters when using the shortcode. Thanks to adelval for providing the code, see


Changed method for creating the widget in preparation of PHP7 support.


Added Czech translation.


Added Italian translation.


Updated branding and language files.


The shortcode now includes the slug of the content block (which is still optional), see for more information on this.


The post status is now used for displaying the content blocks in the widget areas, only published content blocks are now displayed. Thanks to for suggesting this change.


Added dismissable support notification.


Added the possibility for using the content block slug in the shortcode.


Changed the way the button above the content editor is inserted. For background see:


Added filter to ‘public’ value of the content_block post type to make it possible to use the Visual Composer plugin. See support topic:


Changed require to require_once in custom-post-widget.php to solve a possible issue reported by John Sundberg.
Updated SE translation files as provided by Andreas Larsson.


Added ‘Content Block Information’ to overview page, updated styling to reflect new 3.8 interface and rewrote javaScript code for inserting shortcode tag


2.4.5 javaScript fix for inserting shortcode tag


Added unique ID to each content block that is inserted using the shortcode functionality


Changed the way the shortcode button above the editor is called.


You can now add a description to the content block to make it easier for content editors to find out where the block is displayed on the site. Thanks to Andreas Larsson the plugin now includes a Swedish translation.


Added the option to use your own widget template file as suggested by flynsarmy. See for more information.


Added pt_BR translation files as kindly provided by Ronaldo Chevalier.


Removed hardcoded plugins folder path




Various bugfixes and improvements.


Replaced the deprecated media_buttons_context filter with media_buttons. Thanks to Baptiste Gaillard for letting me know about this.


Small fix for issue with the css filepath of the editor icon. Thanks to user zudobug for reporting this issue.


Updated Dutch translation file.


Fix for bug caused by the ‘Advanced Custom Fields’ plugin. Thanks to creativexperience for troubleshooting this issue.
Cleanup of lightbox popup, changed all instances of query_posts to get_post and get_posts.
Support for featured image in custom post widget area.
Changed shortcode button to reflect the new admin style of WordPress version 3.5.


Fix for error when using shortcode with the WPML plugin


Added featured image support and now using query_posts instead of get_post


Fixed debug notices when dragging a new content block to the widget areas and removed the add content block shortcode from the content block editing screen.


Added the option to disable apply_filters on the content to prevent issues with misbehaving plugins. I would have rather not added this, but it appears many plugin developers do not know how to properly use filters (see


Corrected a minor bug regarding translation strings.


Minor bugfix and added the French translation which was created by Alexandre Simard.


Now includes Polish language files as created by Kuba Skublicki.


The content blocks can now be translated using the WPML plugin, thanks to Jonathan Liuti.
Thanks to Vitaliy Kaplya ( a Russian translation has been added to the plugin.


Minor bugfix for edit link in widget.


This release is to fix an issue with the WordPress plugin repository.


Added edit content block link to the widget editor and changed the ‘view content block’ message to include a ‘manage widgets’ link. The ‘Draft’ and ‘Preview’ buttons are now hidden via CSS, hopefully this will soon be default WordPress behaviour (see related ticket:
Thanks to Julian Gardner-Hobbs for requesting this functionality.

1.8.3 -> rolled-back because of some reported issues with social media icons being added to the widget areas

The widget now emulates the $post loop. This means you can now make use of WordPress functionality such as inserting a [gallery]. Thanks to Jari Pennanen for providing the code.


Updated German translation and various bugfixes.


Added a button above to content editor to make it easier to add the shortcode (no need for looking up the id).


This release fixes all the debug error messages Yoast discovered when reviewing this plugin. As requested by Tony Allsopp the option of using the shortcode [content_block id= ] to pull in the content of a content block in a page or post has been added.


The Custom Post Widget plugin is now using the more efficient get_post instead of query_posts to display the content block on the page. A code example for this change has been graciously provided by Paul de Wouters.


Thanks to Caspar Huebinger the plugin now has its own icon and as requested by Stephen James the author field has been added to the Content Block edit screen.


The plugin has been translated into Dutch and German. Hat tip: Caspar Hübinger –


Now the title of the content block is displayed in the admin interface to make it easy to manage the widgets.


The widget title now uses $before_title and $after_title to generate the appropriate tags to display it on the page. Hat tip: Etienne Proust.


Added a checkbox in the widget to make it possible to show the custom post title in the widget area


Added showposts=-1 to the post query to display more than 10 custom posts in the widget configuration select box.


Fixed screenshots for plugin directory


First release