Network Content Syndication Made Easy!

Automatically share content by multiposting between multisite blogs. Syndicate posts to other blogs, update posts between blogs, sync posts, share content templates, etc. Broadcasted posts can be linked to their parents, which updates child posts when the parent post is updated. This includes all data: title, slug, content, custom fields, attachments, etc.

Broadcast, formerly ThreeWP Broadcast, is great for:

  • Chain stores
  • Franchises
  • News sites
  • Schools
  • Anything else with distributed content!

Here are some use cases for Broadcast:

Requires PHP version 5.4 or higher.


  • Posts, pages, custom post types
  • Taxonomies (categories, tags, etc)
  • Custom fields
  • Attached images
  • Featured images
  • Galleries
  • Custom field blacklist, whitelist, and protect list.
  • User role access granularity
  • CDN support (nominally tested Amazon S3)
  • Many extra features in the add-on packs

SEO support

  • Canonical URLs of child posts.
  • Hreflang links (also see Hreflang add-on in the add-on packs)
  • Permalinks of child posts (also see Permalinks add-on in the add-on packs)
  • Yoast’s WordPress SEO plugin integration and support

Add-on Packs

There are several Broadcast add-on packs that expand the capabilities of Broadcast.

3rd party pack

Control pack

  • All Blogs gives all users access to all of the blogs in the network.
  • All Blogs Superadmin allows only superadmins to broadcast to all blogs in the network without having to be a user of the blog.
  • All Images detects all referenced local images in post text fields and adds them to the broadcast.
  • Back To Parent updates the parent post with the new child content.
  • Comments adds support for broadcasting of comments.
  • Custom Field Attachments allows post custom field containing attachment IDs to be broadcasted correctly.
  • Delete Before Broadcast deletes duplicate and similar child posts on each blog before broadcasting.
  • Hreflang adds support for SEO-friendly hreflang html tags.
  • Keep Child Status keeps the status of post children to private, pending, published, draft, no matter the status of the parent.
  • Local Files automatically copies local files to each blog and updates the links in the content.
  • Local Links automatically updates links to local posts on each child blog.
  • No New Terms prevents taxonomy terms from being created on child blogs.
  • Per Blog Taxonomies allows individual control of specific taxonomies for each child post.
  • Permalinks provides more precise control of permalinks for both parents and children.
  • Protect Child Properties prevents various properties of child posts from being overwritten.
  • Redirect All Children redirects single post views from visitors of child posts to the parent post.
  • Shortcode Attachments modifies attachment IDs found in shortcodes to match their equivalent attachments on each blog.
  • Shortcode Menus modifies menu IDs found in shortcodes to match their equivalent menus on each blog.
  • Shortcode Terms automatically translates taxonomy term IDs found in shortcodes when broadcasting.
  • Update Attachments updates existing attachments by copying over the files to the child blogs.
  • Thumbnail Sizes allows for different additional thumbnail sizes on a per-blog basis.
  • User & Blog Settings (UBS) can hide the broadcast meta box and/or menu, modify the meta box to force/prevent broadcast to blogs, with separate settings for users / blogs / roles.
  • User & Blog Settings Post uses the modifications from the UBS plugin to broadcast posts with one click.

Efficiency pack

  • Blog Groups 2 provides a means of groups blogs together, in order to be able to quickly select and unselect blogs from the Broadcast meta box.
  • Duplicate Attachments will duplicate the attachment and thumbnails, instead of letting WordPress regenerate them.
  • Find Some Unlinked Children can selectively link orphans / unlinked posts to parents, instead of automatically linking all found children.
  • New Blog Broadcast automatically broadcasts posts when creating a new blog.
  • Purge Children removes children and their attached files from child blogs.
  • Queue adds a broadcast queue which helps to broadcast posts to tens / hundreds / thousands of blogs.
  • Rebroadcast updates selected parent posts by using a bulk action.
  • Send To Many allows mass broadcast of several posts to blogs at once.

Utilities pack

  • CDN Workaround works around faulty CDNs that do not report the correct URL for attachments.
  • Lock Post allows users to lock editing of posts / pages to only themselves and super admins.
  • Menus copies menus between blogs (overwrite / update), with support for equivalent child posts on the child blogs and equivalent taxonomies.
  • PHP Code – Run custom PHP code on selected blogs. Easily switch themes for all blogs, for example.
  • Sync Taxonomies synchronize the taxonomies of target blogs with those from a source blog.


Although Broadcast is relatively easy to understand by itself, for extra documentation see Broadcast’s online documentation, which covers:

For developers: the code should be well-commented and easily legible for the most part. Extra developer documentation covers:


Requires PHP v5.4, since 5.3 is no longer officially supported.

The git repository can be found at:


  • Broadcast meta box when editing posts
  • Post overview showing linked children
  • Post overview showing linked parents
  • Bulk actions that can be applied to several marked posts at once
  • Post actions for parent posts
  • Post actions for child posts
  • The Broadcast menu
  • Admin settings tab
  • Maintenance tab
  • Uninstall tab
  • Time savings tab showing how much time Broadcast has saved you


Installation Instructions
  1. Check that your web host has PHP v5.4.
  2. Activate the plugin sitewide. The latter option is more common (and useful).
I need support!

Broadcast is sporadically supported in my spare time on the WordPress support forum.

For users of the premium add-on pack, support is available via e-mail.

Debug dumps

A debug dump is the long text that is displayed when broadcasting a post with debug mode on. This dump can then be read to see what Broadcast is or isn’t doing.

To switch on debug mode, see the admin settings. If your site is live it would be wise to input your IP in the associated textarea, so that only you see the debug dump.

Blacklist, whitelisting, force broadcast

Broadcasting to specific blogs, hiding blogs and forcing blogs can be acheived with the User & Blog Settings plugin in the control add-on pack.

Bulk broadcast existing pages

To broadcast many posts at once, see the Send To Many plugin in the efficiency add-on pack.

Galleries and attachments

Attachments are force-broadcasted: the child posts have all their attachments deleted and then copied again.

If you have a gallery shortcode in the post ( [gallery columns=”2″ ids=”427,433,430,429,428″] ) then Broadcast will first check that the image does not already exist on the child blog. It does this by searching for the post name (the filename minus the extension). If no image is found, it is copied.

If you have manually modified the thumbnails on the parent blog, you might want to use the Duplicate Attachments plugin in an add-on pack, otherwise WordPress will generate new thumbnails on each child blog.

Do you have a lot of attachments that you don’t want duplicated to hundreds of child blogs, in order to save space? You’ll have to find a way to refer to the images statically instead of using their media IDs. The reason for this is that when WordPress is referred to an attachment, it can only read the media IDs from the current blog. It cannot switch blogs in order to load the image.

Hide broadcast from the users

The broadcast meta box, menu and columns in the post view can be hidden from users / roles / blogs using User & Blog Settings plugin in the control add-on pack.

Is PHP v5.4 really necessary?

Yes. PHP v5.3 has been officially unsupported since the 14th of August, 2014. In fact, even 5.4 is no longer officially supported since September 2015.

If your web host refuses to upgrade to a supported version, go find a new host.

Incompatible plugins

Below is a list of plugins that just will not work properly with Broadcast and / or its addons:

  • Post Type Switcher

If you have already created posts on other blogs that are supposed to be children of a specific post, you can use the “find unlinked” bulk action to find and link them.

To be considered an orphan the orphaned posts must have the exact same title (name) as the soon-to-be parent and be of the same post type.

You can also use the Delete Before Broadcast add-on from the pack to delete any similar posts on the child blog before broadcasting.

Timeout problems

If you have many attachments in your post, and are broadcasting the post to many blogs, you might encounter a PHP timeout. This means that broadcasting exceeded the PHP time limit and had to be aborted.

There are several solutions to this problem:

  1. Increase the PHP timeout in your PHP.ini settings. This will not speed up broadcasting, only increase your chances of completely broadcasting the post.
  2. Use the Duplicate Attachments add-on. This will duplicate any attachments + thumbnails instead of regenerating them on each child blog.
  3. Use the Queue add-on to put each child broadcast into a queue that is emptied by javascript.

You will not need solution #1 if you use solutions #2 and #3. 🙂

Why can I not see the Broadcast meta box?

Make sure that:

  1. The plugin is network enabled
  2. Your user level has broadcast access (Broadcast access role)
  3. Your user has write access to more than this blog (see Admin settings > Maintenenace > View blog access). Or use the All Blogs control plugin to access all blogs.
  4. The correct post type(s) have been selected
  5. User & Blog Settings is not set to hide the meta box from the user / role / blog

Broadcast is capable of handling simple WooCommerce products.

  1. In the Broadcast custom post type settings: Add “product”.
  2. Save the product normally first.
  3. Then broadcast, selecting the custom fields and taxonomies checkboxes.

This will broadcast all normal product settings: SKU, price, etc.

If your products have variations, a product image gallery, want to sync stock, want to sync orders, need the attribute taxonomies to be synced, you’ll be wanting the WooCommerce add-on.

WPML Sitepress

WPML is supported via the WPML add-on in the 3rd party pack. For more information, see WPML discussion here:

The author suggests using PolyLang instead due to far superior support.

XCache vs APC opcode cache

APC works flawlessly.

Xcache v2 does not support PHP namespaces, which is a PHP 5.3 feature. Trying to enable Broadcast with Xcache v2 enabled will result in a PHP crash.

Xcache v3, which does support namespaces, has not yet been tested. Anyone with Xcache v3 experience is welcome to contact me with info.


Best plugin with best support

This is really good plugin to broadcast post, pages and WooCommerce products. Also Edward is a great support if any issue with the plugin

Awesome support and best plugin for broadcasting!

We can highly recommend this plugin and the author’s support to everyone trying to manage multiple sites with similar content. Even most of users’ requests are implemented straight away. Furthermore the support is the best we ever experienced with a WordPress plugin; if you have any problem, it will be analyzed and fixed within hours to a few days. Great! Many thanks to Edward!

LearnDash add-on

Have you’ve ever thought to use LearnDash on a multisite and transfer Courses and Lessons to the subdomains? Want you block the content on the subdomains? That’s a perfect plugin for you. I think this is solving many issues for LearnDash customers (like me). There are a lot of addons on the Premium pack that are very very useful.

Superb Support, Went Above and Beyond

I purchased the 3rd party pack because I wanted to broadcast events from Event Manager. There was an issue of the locations not being broadcast correctly (it was actually an Event Manager problem and not a ThreeWP Broadcast problem) but Edward still spent countless hours trying to correct the issue. I eventually decided to switch to another event plugin and it had a similar issue, again not a ThreeWP Broadcast problem. Edward still went out of his way and fixed the issue for me!! I could not be happier with the service I was provided. I would buy any product from them knowing they have this kind of support and patience. Thanks again!!!

Great Idea. Super support.

This plugin is very powerful. User support is exceptional. I am running a multisite and needed the canonical links to work correctly. My original configuration was slightly off, but Edward responded to my problem quickly and the canonical links now work as planned. This plugin saves a tremendous amount of time for anyone running a multisite with distributed content.

Awesome plugin & support

The support is great!

We had a big problem whit on of our biggest customers, who use this plugin. We stress-tested and debugged, and Edward gave a lot of help. Many thanks!

Read all 77 reviews

Contributors & Developers

“Broadcast” is open source software. The following people have contributed to this plugin.


Translate “Broadcast” into your language.

Interested in development?

Browse the code or subscribe to the development log by RSS.


38 20170406

Finally dropped the “ThreeWP” prefix from the plugin name! The code remains the same, though, just the plugin name is changed.

  • Fix: Extra check to see whether the attachment was correctly copied. Catches a fatal error when the attachment does not return with a real filename.
  • Fix: Some attachments do not have proper filenames (mp3), so avoid clearing the filename completely. Fixes fatal errors when broadcasting those types of files.
  • Code: Make _get_post_children function public so that the Rebroadcast add-on can queue posts.

37 20170316

  • Fix: Try to replace all media thumbnail URLs in the post content, instead of just the full image size. This will fix references to image thumbnails also.
  • Fix: Plugin now uses standard WordPress translation functions so that it can now be translated online. No experience with this, but it looks to make translation really easy.
  • New add-on: All Images detects all referenced local images in post text fields and adds them to the broadcast.

The next major version of Broadcast will finally have the “ThreeWP” dropped from the name. The files on disk will still be called the same, and the action names will still have the threewp prefix. Only the visible name in the repo and plugin list will change.

The add-on pack names will also lose their prefixes.

36 20170303

  • Fix: Remove warning when trying to get file sizes of non-local attachments. Of course that will fail.
  • Fix: Non-local attachments, when being copied, retain their GUIDs instead of getting a URL based on the child blog. This is useful for retaining CDN urls on attachments.
  • Code: Added prepare_custom_fields() to broadcasting_data in order to help obey the custom field lists when broadcasting taxonomies.
  • New add-on: LearnDash: New add-on. Adds support for the LearnDash LMS plugin.
  • New add-on: WP All Import adds support for post updates from Soffly’s WP All Import Pro.

Translators! The next version of Broadcast will include the new translation __() calls used for translating the plugin online. Please contact me if you know anything about how the WordPress translation management works, so that we can iron out translation migration kinks before they become a problem.

35.9 20170216

  • New: Also sync / broadcast term taxonomy metadata. This will automatically add support for plugins that store extra data in taxonomy metadata, like venues and organisers in the Calendarize It plugin. Developers can look at the terms_and_taxonomies trait to see how it works.
  • Fix: Force setting of exactly the same post dates and modified dates on the children. This fixes the child posts sometimes being a second off. Also allows for “only if child modified” functionality in the Protect Child Properties add-on.
  • Fix: Do not allow broadcasting to the parent blog. This is something that was possible to do via the API.
  • SDK update. Removed PHPmailer class.

35.8 20170203

  • Fix: Make the unchecked post actions in the meta box work again. A previous change in 35.5 broke the delete/trash option from the select box that appears when a broadcasted post is unchecked in the meta box.

35.7 20170127

  • New: Add special check for incompatible plugins (only Post Type Switcher so far) and show an error message instead of broadcasting.
  • Fix: Check that the child blog exists before broadcasting to it. Fixes maintenance checks failing when blogs have been deleted.
  • Fix: Do extra image URL replacements in the content for all copied attachments. Requires that the images have been copied during the broadcast (attaching the image to the blog, or referring to the image in a gallery will suffice). This will take care of images that are statically referenced within shortcodes.

35.5 20170113

  • Fix: If using a bulk action on a post that is not broadcasted, do not trash / delete it.
  • New add-on: Ninja Forms adds support for the Ninja Forms plugin.

35.3 20170106

  • Fix: Warning when there is no post ID in the $_POST variable. Happens when importing posts, apparently.
  • Fix: Debug file URL.
  • New add-on: Aqua Page Builder adds support for the Aqua Page Builder plugin.
  • New add-on: Shortcode Terms. Automatically translates taxonomy term IDs found in shortcodes when broadcasting.
  • Code: Show WordPress version in system info / debug.

35.1 20161206

  • Fix: Extra check that attachments exist, for those times when posts are attached but don’t have files.
  • Fix: Ignore post type hierarchical support when checking for broadcasted parents. This fixes the fatal error when broadcasting WooCommerce Variations that, for some reason, do not support hierarchies, but still have parent posts.

35 20161206

  • Fix: Do not clear the attachment_data array in the broadcasting data. Fixes WooCommerce Swatches being ignored if there are normal attachments.
  • Code: More robust way of retrieving equivalent_posts. This fixes a bug when broadcasting ACF relations between two blogs with the same child posts as relations, instead of broadcasting a related post from the parent blog to a child.
  • Code: Warn network admins of incompatible Broadcast and BC add-on pack versions. Users should keep the MAJOR versions of both the same.
  • Code: Added support for partial broadcasts. This is used with the Queue add-on when broadcasting products with many variations which normally would timeout even the most patient of servers. See broadcasting_data->partial_broadcast().

34.5 20161111

  • Code: More upload_dir debugging info.
  • New add-on: Divi Builder. Adds support for Divi Builder and themes using it. No more getting the logo on your child sites overwritten when broadcasting!

34.3 20161027

34.2 20161006

  • Code: Handle attachments (delete, copy) before taxonomies. This prevents attachment delete+copy+delete+copy sequences when some add-ons (ACF, WooCommerce) request taxonomy attachments be copied.
  • New add-on: Local Files. Automatically copies local files to each blog and updates the links in the content.

34 20160925

  • Fix: Prevent duplicate attachments by forcing renaming of copied attachments. This fixes the long-standing problem of attachments with numbers at the end of the filenames being duplicated.

This stems from a WordPress feature / bug that removes the numbers when copying the images to each child blog. For some reason attachments inserted by PHP code, using normal WordPress functions, are not assigned the same post_names as on the parent blog, which prevents Broadcast from finding the attachments when updating the post. This will cause Broadcast to recopy the attachment, creating a dupe.

  • Code: Added broadcasting_data->copied_attachments_to_blog code, together with ThreeWP_Broadcast->copy_attachments_to_blog().
  • The “ThreeWP” part of the plugin name will be dropped in the future.

33.1 20160913

Minor release. Upgrade not mandatory.

  • Code: Initialize broadcasting_data->attachment_data array in the class.
  • Code: Display even more debug info when updating / inserting the child post.

33 20160817

  • Fix: Find Unlinked Children finds children with the same status. So a draft will find unlinked drafts. To find different child statuses, just change the status of the parent post before finding.
  • Fix: Stricter handling of attachment paths. This fixes Amazon S3 file paths being incorrectly detected as local files by PHP.
  • Code: Added collect_post_type_taxonomies action to help plugins sync extra taxonomy data, like ACF images and what not.
  • Code: save_post() method returns the broadcasting_data object if anything was broadcasted.
  • New add-on: Contact Form 7. Adds support for Takayuki Miyoshi’s Contact Form 7 plugin.
  • New add-on: Yoast SEO. Adds support for the Yoast SEO plugin. Only needed if you want taxonomy SEO data synced when broadcasting.
  • 4.6.0 compatibility.

32.3 20160722

  • Fix: Check for existence of get_plugin_data() function before broadcasting. Fixes HTTP processing with Queue add-on. Quite an unexpected and illogical bug.

32.2 20160719

  • Fix: A workaround for an existing Yoast SEO workaround. Fixing the first Yoast problem prevented Woocommerce variations from being broadcasted properly. Applies only to users of Yoast + Woocommerce variations.
  • New add-on: Shortcode Attachments modifies attachment IDs found in shortcodes to match their equivalent attachments on each blog.
  • New add-on: Shortcode Menus modifies menu IDs found in shortcodes to match their equivalent menus on each blog.
  • More debug code, showing the active plugins.
  • SDK update.

32.1 20160718

  • Code: raw_html_section. Allow lazy conversion of meta box inputs. Fixed compatibility with v32 of Per Blog Taxonomies.

32 20160715

  • Code: Added broadcasting_data->high_priority property to prevent certain plugins, like the Queue, from broadcasting posts in several steps. All API broadcasts are now set to high_priority.
  • New add-on: Toolset merged the old Types and Views add-ons with new support for CRED post and user forms.

31 20160705

  • Fix: Yet another workaround for Yoast SEO, version 3.3.2 this time.
  • New add-on: Calendarize It adds support for Calendarize It! events.
  • New add-on: Events Manager adds support for the Events Manager plugin.
  • Code: post_action action will now affect child posts also. See traits/post_actions. This is for unlinking The Events Calendar recurring events.

30 20160606

  • Debug: Even more debugging info in the debug dumps.
  • Code: New preparse_content action which allows plugins that support the action to prepare themselves for modifying post content in different places, not only in the post content.
  • Code: broadcast_data->get_linked_post_on_this_blog() checks for both a parent or a child post on this blog and returns the ID.
  • Code: Added threewp_broadcast_allowed_post_statuses filter.
  • New: Plugin Pack Plugin: Tao Schedule Update adds support for Tao Schedule Update plugin.
  • New: Plugin Pack Plugin: Types adds support for broadcasting child post types created by OnTheGoSystems’ Toolset Types plugin.

29.1 20160418

  • New: Broadcast Data maintenance check also checks for the same post types.
  • New: Broadcast Data maintenance check also checks for unnecessarily linked child posts in the broadcast data of child posts.
  • New: Plugin Pack Plugin: Download Monitor adds support for downloads and shortcodes from Never5’s Download Monitor plugin.
  • Fix: Allow add-on packs to update on servers with weird SSL libraries, using the BROADCAST_PP_SSL_WORKAROUND define.
  • Fix: Allow broadcasted drafts to be rescheduled / continue to be scheduled.
  • Code: During broadcasting, fetch the new post after updating it.

29 20160405

  • New: Plugin Pack Plugin: Hreflang adds support for SEO-friendly hreflang html tags.
  • New: View Post Info maintenance check. Helps debugging by showing all information about posts and the associated postmeta.
  • Code: New parse_content action to ask Broadcast to do content parsing (replacing of attachment IDs and guids, etc). Used by the newest version of the ACF add-on.

28.3 20160309

  • New: Add-on pack plugin: Post Expirator adds support for Aaron Axelsen’s Post Expirator plugin.
  • New: Add-on pack plugin: Rebroadcast updates selected parent posts by using a bulk action.
  • Fix: Non-admins can see the simple Broadcast info again upon visiting the Broadcast menu item.
  • Fix: Escape blog names to allow for angled brackets in blog names.
  • Fix: Check for parent linkage as the post parent on child blogs.
  • Fix: Prevent duplicate site url in guid in subdirectory installs.
  • Code: broadcasting_data object now has $parent_broadcast_data.

28 20160118

  • Fix: Always run database table creation code upon activation.
  • New Add-on pack plugin: EventOn – Adds support for Ashan Jay’s EventON plugin with tickets.

27.2 20151215


  • Tested with WP 4.4

27 20151124

  • Fix: Simplified thumbnail copying code, for those with thumbnails on CDNs.
  • Fix: Savings calculator was calculating wage per minute, not per hour.
  • The overwrite existing attachment is now described as “Delete and then recopy the attachment” instead of “Overwrite the attachment”.
  • New Add-on pack plugin: Avia Layout Builder – Run the hidden Avia Layout Builder content through the Attachment Shortcode Broadcast plugin.
  • New Add-on pack plugin: Update Attachments – Update existing attachments by copying over the files to the child blogs.
  • New Add-on pack plugin: CDN Workaround – Work around faulty CDNs that do not report the correct URL for attachments.
  • New Add-on pack plugin: PHP Code – Run custom PHP code on selected blogs. Easily switch themes for all blogs, for example.
  • Code: Removed “find unlinked child” post action since it makes no sense.
  • Code: Added get_existing_attachment_actions and apply_existing_attachment_action actions.
  • Code: Removed unused upload_dir from attachment_data::from_attachment_id().
  • Code: Taxonomies are dumped upon debug.

26 20151102

  • Fix: Try to get post sticky status via _POST variables and via function, in case one is broadcasting via API and the POST sticky status isn’t available.
  • New: Time savings tab. Keep track of how much time and money you’ve saved by using Broadcast.
  • New Add-on pack plugin: Thumbnail Sizes allows for different additional thumbnail sizes on a per-blog basis.
  • New Add-on pack plugin: bbPress adds support for BBPress forums, topics and replies.
  • Premium pack has been split up. Each add-on pack can be purchased individually (and cheaper, of course).

25 20151024

  • Blog Groups: This is the last time this obsolete plugin will be released. If you wish to use it in the future, copy it to another plugin directory and activate it from there. The replacement is the Blog Groups 2 plugin in the add-on pack.
  • Fix: Prevent duplicates when referring to parent posts on the child blog. See
  • Fix: Attachments in child posts were getting the wrong guid. See 2 year old bug that is still open.
  • Code: custom_fields()->child_fields() now method chain.
  • Code: get_post_types action has two new conveience methods: add_type and add_types.
  • New Add-on pack plugin: Sync Taxonomies now allows for recording taxonomy changes and then replaying them on other blogs, simplifying mass-editing of terms.

24 20151009

  • New: Allow children to be unlinked / trashed / deleted from the meta box.
  • New Add-on pack plugin: FooGallery – Adds support for FooPlugins’ FooGallery plugin.
  • New Add-on pack plugin: Geodirectory – Adds support for Geodirectory places.
  • Code: broadcasting_data fatal error – now checks to see it custom_fields is an object before cloning it.

23.5 20150921

  • New: Attachment (image) descriptions are now copied to children.
  • New: CDN support. Preliminarily tested with Amazon S3. If you have other CDNs, please test and e-mail.
  • New Add-on pack plugin: GEO my WordPress – Adds support for Eyal Fitoussi’s GEO my WordPress geolocation plugin.
  • Version bump for WP 4.3.1

23.4 20150901

  • Fix: Clone the custom fields object when copying broadcasting_data. This fixes a problem with WooCommerce variations not being correctly updated.

23.3 20150826

  • Fix: save_post workaround for WordPress bug See nop(). See “save_post decoys” setting in the misc Broadcast settings.
    This should fix The Events Calendar not broadcasting non-events as it should.

23.2 20150824

  • New: Show blog and post names (and link to them) in the broadcast data maintenance results.
  • Version bump for WP 4.3

23.1 20150818

  • Fix: Correctly sync taxonomies when the term IDs are identical on both blogs.
  • Fix: API should honor the broadcast_post filter.
  • Code: Moved from github to bitbucket:
  • Code: broadcasting_data()->custom_fields()->update_meta() method added.

23 20150803

  • Code: New actions for delete_post_broadcast_data, get_post_broadcast_data and set_post_broadcast_date. Fix for “Back to Parent” plugin.
  • Code: broadcasting_data->equivalent_taxonomy_term_id() is obsolete. Use broadcasting_data->terms()->get() instead.
  • Code: broadcasting_data->post_custom_fields is obsolete. Use iterable broadcasting_data->custom_fields() instead. Or custom_fields->original if you must.
  • Code: broadcasting_data->copied_attachments() has new add() method.
  • Code: broadcasting_data->new_post_old_custom_fields is obsolete. Use ->custom_fields->child_fields().
  • New Add-on pack plugin: Global Content Blocks – Adds support for shortcodes from WP Xpert’s Global Content Blocks plugin.
  • New Add-on pack plugin: Metaslider – Adds support for Metaslider shortcodes.

22 20150721

  • New: post delete, trash and restore hooks are now always monitored, instead of just during the display of the posts table. This should allow other plugins to modify posts (perhaps expiring posts?) without unsynchronizing the link info.
  • UI: Admin settings are now the Broadcast menu item itself.
  • UI: Settings are now displayed in different tabs. Custom post settings are now part of normal settings.
  • UI: Broadcast menu item is not shown at all to users who may not use broadcast.
  • UI: Link checkbox is now always checked per default. If checked, it only has an effect if blogs are selected, else it just remains checked without interfering with anything.
  • Code: Merge magnific popup js and css into main files.
  • Code: Popup uses jQuery objects for the title and the content ($popup.$title and $popup.$content). set_html is renamed to set_content. You can now append jQuery objects directly to the content. Premium pack javascript updated to use same.
  • Code: broadcasting_data->add_attachment() method added to conveniently add attachments.
  • New Add-on pack plugin: New Blog Broadcast – Automatically broadcast posts when creating a new blog.
  • New Add-on pack plugin: TablePress – Adds support for broadcasting TablePress shortcodes.

21 20150705

  • New: Broadcast now hooks into the network admin menu.
  • Fix: Attachments that are also the featured image will no longer be deleted. This fixes broken links to the two images, which are actually the same.
  • Fix: Copied attachments are given the names from the original attachment. See
  • Fix: Display the blog domain in the meta box if the blog name is empty.
  • Code: API release. See src/api.php
  • Code: threewp_broadcast_get_user_writable_blogs, threewp_broadcast_maybe_clear_post hook priority changed from 11 to 100.
  • Code: threewp_broadcast_get_post_types, threewp_broadcast_menu, threewp_broadcast_prepare_meta_box, threewp_broadcast_wp_insert_term, threewp_broadcast_wp_update_term, threewp_broadcast_manage_posts_custom_column priority change from 9 to 5.
  • Code: New attachment_data/copied_attachments helper.
  • Code: broadcasting_data->broadcast_to() can now take a simple blog ID integer.
  • Code: broadcasting_data handles more setup itself, instead of relying on others.
  • Code: broadcasting_data now defaults to true for custom fields, linking and taxonomies.

20 20150609

  • New: Custom field handling has been simplified. The “broadcast internal field” setting has been removed and the blacklist, whitelist and protect list now apply to all fields.

The custom field settings can now handle wildcards.

If you do not wish the internal custom fields (the ones that start with an underscore) to be broadcasted, check that you now have _* in the blacklist.

Custom fields are now handled in this order: first check the blacklist, if blacklisted checked the whitelist.

The protect list is applied to the surviving custom fields specified to be protected.

  • Fix: Reload broadcast data upon switching blogs during broadcasting. This is probably the cause of half-linked children when broadcasting is interrupted or queued.
  • Fix: Posts can have several thousand child posts now. The database column was set too small (text instead of longtext) to allow for all too many child links.
  • Code: More debug info. Custom field lists are dumped.
  • Code: Fix saving of broadcast data so that it can be resaved during the same broadcast.
  • Code: Debug dump now shows HTML tags.
  • Updated .pot file for translations.

19.1 20150524

  • Fix: Find Unlinked Children will not add children that already have parents or are parents themselves.

19 20150519

  • Code: New action: each_linked_post, used to modify all linked posts via a PHP callback.
  • Code: new_post_old_custom_fields in broadcasting_data object.
  • Code: broadcasting_data->new_post is now a post object. Retrieve using ->new_post() method. Retrieve keys using ->new_post( ‘ID’ ).
  • Bump WordPress version to 4.2.2
  • New Add-on pack plugins: Delete Before Broadcast, Protect Child Properties.
  • New Add-on pack extras: All Blogs cache clear, WooCommerce stock sync, Woocommerce PDF voucher sync

18.1 20150424

  • Fix: Network admin can do anything network admin wants.
  • Bump WordPress version to 4.2

18 20150412

  • New: Multiple roles can now be selected. Check that your role settings are correct after upgrading.
  • Serbian translation. Credit Borisa Djuraskovic at
  • Fix: Recreate child posts that have been deleted but not unlinked. This is a workaround for a rare condition.
  • Fix: Broadcast data can be looked up up via blog+post ID, in addition to the row in the database. See the maintenance tab.
  • Fix: Do not show archived, deleted and spammed blogs in the meta box.
  • Fix: Better temp-directory handling when running maintenance checks.
  • Fix: Workaround for Yoast SEO data not being saved.
  • Fix: Removed mysqli warnings when creating UBS modifications and queue objects.
  • Code: Equivalent terms are saved during term syncing.
  • Premium Pack Plugin: Added “Blog Groups 2”.
  • Premium Pack Plugin: Added “Protect Child Author”.

17.1 20150219

  • Fix: No more warning when there are no terms in a taxonomy.

17 20150216

  • Code: broadcasting_data now supplies new_child_created property.
  • Fix: Load translation javascript strings earlier. Credit Tobias.
  • Fix: Added JS check for unreferenced broadcast_blogs_to_hide variable.
  • Fix: Corrected Exception class in terms_and_taxonomies trait.
  • Fix: Javascript error on clicking child’s “broadcasted by” link (for unlinking popup). Credit jaapbaardaap. See
  • Fix: No taxonomy terms on the parent will clear the taxonomy on the child also.
  • Premium Pack Plugin: Added “Social Networks Auto Poster” forces SNAP to use the unique social settings on each blog
  • Premium Pack Plugin: Added “Find Some Unlinked Children” selectively find unlinked children to link.
  • Premium Pack Plugin: User & Blog Settings: Able to hide post bulk actions from users.

16 20150116

  • Fix: Fixed autoloading error for specific web hosts.
  • Fix: Form actions were incorrect for some non-standard installations, causing forms to timeout.
  • Optimization: Term syncing only syncs terms that are used. This should solve any out-of-memory errors that those with 39000+ terms were having.
  • Premium Pack Plugin: Added “Duplicate Attachments” drastically speeds up broadcasting when using attachments. Also retains any manual modifications to the attachment thumbnails.
  • Premium Pack Plugin: Comments: Can now keep comments automatically synced between linked posts.
  • Premium Pack Plugin: User & Blog Settings: “On” for checkboxes no longer forces the checkbox to be ticked.
  • Premium Pack Plugin: User & Blog Settings: Automatically clean up orphaned criteria.
  • Premium Pack Plugin: User & Blog Settings: More robust detection of post types.

15 20141218

  • Code: Allow other plugins to prevent term creation.
  • New: Premium Pack Plugin: No New Terms
  • Fixed: Sticky status kept when clearing the POST.
  • Fixed: Bulk actions not appearing for some users

14 20141210

  • Fix: Display bulk actions in a different way to increase compatability with Admin Columns Pro.
  • Fix: Override canonical URL for pages also.
  • New: Premium Pack Plugin: Lock Post

13 20141201

  • Fix: Blog groups: Group name can be changed again.
  • Debug: Custom fields are shown in the debug dump.
  • New: Premium Pack Plugin: Polylang
  • POT file and Swedish translation updated.
  • Code: Source moved from include/ to src/.
  • Code: Uses Plainview SDK with custom namespace for future-proofing and conflict avoidance.

12 20141109

  • New: Post actions have been reworked. Documented here:
  • New: “Find orphans” is now “Find unlinked children” and is a bulk action.
  • New: Setting to choose how many children to view in the post overview, before displaying a child count.
  • Fix: Last used settings notice removed.
  • Code: _3wp_broadcast table for last used settings has been removed.
  • New: Premium Pack Plugin: The Events Calendar

11 20141021

  • Fix: Fatal error when broadcasting attachments.

10 20141020

  • New: Premium Pack Plugin: Menus
  • Code: Major refactoring. ThreeWP_Broadcast() function introduced to easily retrieve the Broadcast instance.
  • Code: threewp_broadcast_get_user_writable_blogs is now an action.
  • Code: Actions now use the standard Plainview WordPress SDK actions as the base class.

9 20141017

  • Fix JS error: blogs_to_hide empty value.
  • Fix: last_used_settings warning.
  • Fix: Settings being forgotten sometimes.
  • Fix: Maintenance not working sometimes due to non-standard temp directory.

8 20141013

  • New: Premium Pack Plugin: Protect Child Status
  • Fix: Better duplicate image finding.
  • Code: broadcasting_after_switch_to_blog action has $broadcast_here property. Allows skipping blogs.
  • Code: Last used settings are now stored in the user’s meta table, instead of a separate database table. The table will be removed in v9 or v10.
  • Code: Better attachment validity checking.

7 20140923

  • Fix: Massive optimization of taxonomy syncing.
  • New: “Same Parent” check for broadcast data maintenance check. If two posts on a blog say they have the same parent.
  • Fix: Hang upon broadcasting galleries.
  • Fix: Not setting child post taxonomies sometimes.
  • Fix: Code to prevent broadcast looping (using the ACF plugin).
  • Fix: Copy attachments with metadata that don’t have filenames (ex: m4a files).

6 20140909

  • Code: broadcast_data class replaces BroadcastData.
  • New: Premium Pack Plugin: Back To Parent
  • Version 4.0 compataiblity (version bump).
  • Obsolete and broken WPML plugin removed. See discussion here:

5 20140830

  • Hide information from non-network admins.
  • Fix: Warning messages on lines ~2000
  • Fix: Unnecessary warning for empty blog groups.
  • Fix: Unlink all works again.
  • Code: Better post modification detection (line 2553).
  • Change: Internal fields are now broadcasted per default on NEW installations.

4 20140814

  • Fix: More robust duplicate attachment finding.
  • Fix: Do a post type check before broadcasting.
  • Fix: Check for invalid thumbnails before broadcasting.
  • New: Premium Pack Plugin: All In One Calendar
  • New: Premium Pack Plugin: Protect Child Content
  • New: Premium Pack Plugin: Redirect All Children
  • New: Premium Pack Plugin: User & Blog Settings Post

3 20140708

  • New: Blog groups: after selecting a blog group the value will no longer change back to “no group selected”.
  • New: Blog groups: select “no group selected” and the same blog group again to unselect the blogs from the group.
  • Fix: Featured post conflicts resolved. See 3+1 fixes below.
  • Fix: Do not automatically delete the thumbnail (it might not be attached to this post).
  • Fix: Removed attachment cache.
  • Fix: Only attach copy image to post if it was attached to the parent post.
  • New: New related premium pack plugin: Keep Child Attachments.
  • Code: Meta Box has two new methods to allow for input modifications before display: convert_form_input_later() and convert_form_inputs_now().
  • Note: Changed versioning to rapid release. No more point releases.

2.24 20140615

  • New: Custom field protect list.
  • Fix: Better support for Windows servers.

2.23 20140520

  • New: Premium Pack Plugin: Comments
  • Code: broadcasting_data->new_post()

2.22 20140511

  • Fix: Attachment metadata was not copied sometimes.
  • New: Broadcast file checksum info, for debugging purposes.
  • Code: Even more debug info.
  • Code: code_export removed. Debug methods are now a trait in the SDK.

2.21 20140422

  • New: Custom roles are accepted.
  • New: Broadcast Data check checks that the table has the ID column.
  • New: Premium Pack plugin: Purge Children.
  • Fix: Fatal error when syncing taxonomies. Sometimes.

2.20 20140412

  • New: Premium Pack plugins: Custom Field Attachments, Sync Taxonomies.
  • More debug information when syncing taxonomies.
  • Code: collect_post_type_taxonomies for Sync Taxonomies plugin.
  • Code: wp_insert_term and wp_update_term hooks, for Sync Taxonomies plugin.

2.19 20140402

  • New: Clear POST setting.
  • Fix: More tolerant custom field detection for incorrectly set up custom post types.
  • Fix: Italian translation updated.
  • Fix: Attachment checking uses “name” instead of “post_name” to search for attachments. Less memory required.
  • Code: More debugging code.

2.18 20130314

  • New: Premium Pack plugins: Attachment Shortcodes and Event Organiser.
  • New: Debugging can be limited to specific IP addresses.
  • Fix: Better gallery shortcode detection.
  • Fix: Incorrect debug string during attachment handling.
  • Fix: Blog Groups and WPML plugins have version numbers again in order to be upgradeable.
  • Code: Even more debugging information available.
  • Code: Added find_shortcodes method.

2.17 20140226

  • New: Debug setting and information when broadcasting.
  • Fix: Taxonomy names are now synced.
  • Fix: Attachment captions fixed.
  • Fix: Groups ignores non-existing blogs.
  • Code: Added broadcasting_modify_post action.
  • Code: Added get_post_types action.

2.16 20140211

  • New: Attachment conflict handling.
  • Fix: Do not do anything about save_post if $_POST[ ‘broadcast’ ] is not set.
  • Fix: WPML plugin clears the WPML cache when posting.

2.15 20140123

  • Fix: Menu order is now also broadcasted.

2.14 20140117

  • New: Canonical URL detects and disables the canonical link from Yoast’s WordPress SEO plugin.
  • Fix: Better compatability with User Blog Settings and Keep Child Settings plugins.
  • Fix: Better support for Microsoft IIS.
  • Removed obsolescence message – all of the features are needed by at least one person.


Skipping version 13.

2.12 20140112

  • New: Maintenance: View Blog Access check added.
  • New: All Blogs plugin is now available in the premium pack.
  • Code: get_user_writable_blogs filter moved to priority 11.
  • Code: $_POST is now emptied, not removed.
  • WPML plugin will be obsoleted soon. A more functional premium plugin will be available.

2.11 20131218

  • New: WordPress v3.8 support.
  • New: Custom post types tab shows the available post types on the current blog.
  • New: Per Blog Taxonomies plugin is now available in the premium pack.
  • New: Permalinks plugin is now available in the premium pack.
  • Fix: Nested broadcasting changes blogs to parent blog.
  • Fix: Scripts and CSS get version numbers.

2.10 20131121

  • New: Duplicate broadcast data check in maintenance.
  • New: WooCommerce plugin is now available in the premium pack.
  • Fix: Loading of CSS and JS from non-standard path.
  • Fix: Check that the thumbnail is an image before setting it.
  • Code: No more global broadcasting_data property.
  • Code: broadcasting_data can be used as call stack.

2.9 20131113

  • New: Add “blogs to hide” setting.
  • New: Keep Child Status plugin is now available in the premium pack.
  • Fix: Blog names are unescaped. No more weird HTML characters in the blog list.
  • Code: broadcast array is no longer removed from the $_POST, due to copy by reference on some versions of PHP 5.4.

2.8 20131109

  • New: Attachments are attributed to the original author, instead of the person doing the broadcasting.
  • New: Database maintenace admin tab. Experimental. Make a backup first. Has help text.
  • Code: Broadcast data table has unique row numbers.

2.7 20131101

  • New: All-links in post overview.
  • New: Linked posts can be deleted, trashed, restored and unlinked.
  • Fix: Settings are ajaxified again.
  • Fix: Group selection works again.
  • Fix: No more warnings when using empty custom field blacklist / whitelists.
  • Advanced Custom Fields plugin is now available in the premium pack.

2.6 20131028

  • Fix: Broadcasted featured image is attached to post if necessary.
  • Fix: List of attachments when broadcasting is not allowed to be cached anymore.
  • Fix: Neverending loop fixed when “parent permalinks” is checked.
  • Code: prepare_broadcasting_data is now an action.
  • Code: last_used_settings copied into meta_box_data.
  • Code: broadcasting_data->new_post is newly created for each child blog.

2.5 20131024

  • Fix: No more fatal errors when editing child posts.
  • Fix: Finding orphans works again.

2.4 20131018

  • Fix: Selected blogs are shown after selecting a group.
  • Fix: Better JS and CSS loading for subdirectory installs.
  • Fix: Allow editing of slugs when overriding child permalinks.
  • Fix: Child deletion link doesn’t delete twice.
  • New: Support to hide broadcast box, menu, columns. See User & Blog Settings plugin.

2.3 20131011

  • New: Caching of BroadcastData speeds up the post overview.
  • Fix: More than one blog group is visible.
  • Code: prepare_meta_box action added. added_meta_box action removed.

2.2 20131007

  • New: Custom field exceptions are now separated into a blacklist and a whitelist.

2.1 20131007

  • Fix: Don’t display broadcast meta box if no access, only access to 1 blog.

2.0 20131006

  • Removed: Unecessary role to create taxonomies, which are now automatically created and synced.
  • Removed: Blacklisted blogs – replaced with per-blog per-user functionality in Premium pack.
  • Removed: Required blogs – replaced with per-blog per-user functionality in Premium pack.
  • Fix: Category broadcast bug
  • Code: Large rewrites. New actions and filters.
  • Code: Minified css.
  • Code: Modernized user.js.
  • Code: $plugin_version now matches the actual version.

1.32 20131003

  • Fix: Broadcasting of featured images, attachments and galleries works much better.

1.31 20130929

  • Fix: Taxonomies are sometimes missed if uncategorized is used.

1.30 20130927

  • Fix: Fixed bug that sometimes skipped some blogs, at random, when broadcasting.

1.29 20130926

  • Users are requested to check their post type and custom field exception settings after upgrading.
  • Fix: Converted array settings to strings, which fixes the foreach() error on line 1544.
  • Fix: Posts can be trashed from the parent post overview.

1.28 20130924

  • Fix: Category matching uses more fuzzy searching. Fixes WP_Error on line 1850.

1.27 20130923

  • New: Override child post permalinks works with custom post types.
  • New: Permalink cache when overriding child permalinks. Speeds up looking up the same post during a page view.
  • WPML plugin version bump.

1.26 20130915

  • Fix: Featured image broadcast works again.
  • WPML plugin version bump.

1.25 20130905

  • Code: Fixed Broadcast column in posts view.

1.24 20130904

  • Code: Fixed typo.

1.23 20130903

  • Fix: Image broadcasting works again.
  • Fix: Gallery shortcodes are updated.

1.22 20130813

  • Fix: Unlinking works. Again.
  • Code: Removed network_admin_menu code.

1.21 2013-08-12

  • New: WPML support plugin added.
  • Fix: Moved Broadcast settings to the blog’s general settings.
  • Fix: Unlinking works again.
  • Fix: Add PHP v5.4 version check.
  • Code: Added broacast_post() method.
  • Code: Added actions.
  • Code: Added broadcasting actions.
  • Code: More documentation for Broadcasting_Data object, together with refactoring of save_post cost.

1.20 2013-06-02

  • Fix: Attachments should be properly broadcast now.
  • Code: Added Broadcasting_Data.php.
  • Code: Added $threewp_broadcast->broadcasting_data when broadcasting.
  • Code: Most methods have been made public.
  • Code: Refactoring and cleanup.
  • Code: Tabs, SDK update.
  • Still requires PHP v5.4. Ask your web host to update.

1.19 2013-05-01

  • Fix: Trying to add a taxonomy term that already exists at the target blog. Thanks:
  • Fix: Using new wp_trash_post hook when deleting [child] posts. Thanks:
  • Code: Using plainview_sdk. Requires php v5.4 (because of traits).

1.18 2013-02-22

  • New: Option to disable overriding of canonical URLs. Used if other plugins also manipulate the url in the HTML head.
  • New: Private posts can be broadcast.
  • Fix: Broadcasting of attachments works better. Galleries are also broadcasted (due to editing of the gallery shortcodes).

1.17 2013-02-15

  • New: Children have their canonical links pointed to the parent.

1.16 2013-02-14

  • Fix: Titles and menu order of attached images are also broadcasted. Thanks to

1.15 2013-02-13

  • Fix: post type settings works again.

1.14 2013-02-12

  • Fix: Taxonomies are checked recursively. Thanks to
  • Fix: Arrow in broadcast box fixed

1.13 2013-01-05

  • Fix: Compatability with WP 3.5 (roles work again).

1.12 2012-08-27

  • Overridden child permalinks use the nice permalink instead of /?p=123
  • Romanian translation from Alexander Ovsov
  • Added extra Activity Monitor details, from patch from Flyn.

1.11 2012-02-11

  • Fixed non-broadcasting bug. sigh

1.10 2012-02-20

  • Italian added.
  • Fixed double-posting bug when using required lists.

1.9 2012-02-18

  • Bug fixed: post_link only receives one parameter.
  • Bug fixed: double-posting when using an empty required list.
  • Rebroadcast of old images now works (thanks Ross Hawkes).
  • Broadcast menu moved to profile menu (for the sake of contributors).
  • Better support for contributor roles.
  • Better finding of orphan posts.

1.8 2012-02-10

  • Old broadcasted images are properly deleted from child blogs.
  • Settings can now be saved again. Sigh.

1.7 2012-02-08

  • Featured Images work again.

1.6 2012-02-05

  • Find orphans
  • Bugs fixed that prevented proper broadcasting

1.5 2012-02-04

  • Custom post and custom taxonomy support
  • Multiple custom field values with the same key can be broadcasted
  • Will not try to attach files that were deleted from disk
  • Broadcasted images retain their ALT, TITLE and caption.
  • New link icon
  • New base php
  • Better linking to child posts
  • Post meta fields are maybe unserialized
  • Fixed Activity Monitor support


  • Works with WP 3.1
  • Added a shrink / expand control in the broadcast meta box


  • Category syncing works with unparented categories.
  • Activity Monitor activities have types.
  • $threewp_broadcast->is_broadcasting() is now available.
  • Now even more links can be overrided.


  • Custom field exceptions added
  • Priority can now be 10 characters
  • Category broadcast role is back again. 🙂


  • Settings are kept when activating the plugin.
  • Child posts are given link info.
  • Child post permalinks can be overriden.
  • Last used settings are remembered.
  • Broadcasted children cannot be rebroadcasted.
  • Page templates are broadcasted.
  • Broadcasted categories are synchronized with the children.
  • Broadcasted custom fields aren’t duplicated anymore.
  • Sticky status is broadcasted.
  • Page parents are kept. The parent page must be broadcasted first.
  • Drafts and future posts can also be broadcasted.


  • Galleries are now broadcastable.


  • Custom fields can be broadcast.
  • Attached images can be broadcast.
  • Broadcasted posts are now linked to the parent post.
  • Pages can be broadcast.


  • Dutch translation added, courtesy of Johan Daems.
  • Superadmins have access to all blogs, even though they don’t.


  • WP3 compatability


  • Initial public release