Publish Posts to Multiple Blogs in WordPress Multisite

In this tutorial I will show you how to publish posts to multiple blogs within your WP Multisite Network automatically.

save_post() – it is actually all we need

By the way the code below is similar to the code we used in this tutorial to move network posts from one website to another.

add_action( 'save_post', 'misha_post_to_all_sites', 20, 2 );
 
function misha_post_to_all_sites( $original_post_id, $original_post ){
 
	// do not publish revisions
	if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $original_post_id;
 
	// actually we need only "publish" status
	if( get_post_status( $original_post ) !== 'publish' ) return $original_post_id;
 
	// prevent "Fatal error: Maximum function nesting level reached"
	remove_action('save_post', __FUNCTION__);
 
	// here you have to specify blog IDs where you would like to publish the posts
	$blog_ids = array( 2, 3 );
 
	// let's get this post data as an array
	$post_data = array(
		'post_author' => $original_post->post_author,
		'post_date' => $original_post->post_date,
		'post_modified' => $original_post->post_modified,
		'post_content' => $original_post->post_content,
		'post_title' => $original_post->post_title,
		'post_excerpt' => $original_post->post_excerpt,
		'post_status' => 'publish',
		'post_name' => $original_post->post_name,
		'post_type' => $original_post->post_type,
	);
 
 
	// terms and post meta as well
	$post_terms = wp_get_object_terms( $original_post_id, 'category', array('fields' => 'slugs') );
	$post_meta = get_post_custom( $original_post_id );
 
	foreach( $blog_ids as $blog_id ) {
 
		switch_to_blog( $blog_id );
 
		// if post with the same slug exists, do nothing
		if( get_posts( array( 'name' => $post_data['post_name'], 'post_type' => $post_data['post_type'], 'post_status' => 'publish' ) ) ) {
			restore_current_blog();
			continue;
		}
 
		$inserted_post_id = wp_insert_post($post_data);
 
		wp_set_object_terms( $inserted_post_id, $post_terms, 'category', false);
 
		foreach ( $post_meta as $meta_key => $meta_values) {
			// we do not need these redirects
			if( $meta_key == '_wp_old_slug' ) {
				continue;
			}
			foreach ($meta_values as $meta_value) {
				add_post_meta( $inserted_post_id, $key, $meta_value );
			}
		}
 
		restore_current_blog();
 
	}
 
}

Do You Need a Plugin for it?

Not sure if many of you need this functionality as a plugin. I didn’t find any good solutions, so I can create a plugin for you something like this:

WordPress Multisite – publish post to multiple blogs plugin

What would you say? Leave “YES” in comments section below if you need this plugin.

Some interesting articles on WordPress Multisite

Need some help with WordPress Multisite?

If you need some professional developer help, I will be happy to assist you.

Contact me Who I am?

Leave a comment

php js HTML CSS Code