Copy the code below into a new php template file inside the Twenty Eleven theme, then create a blank page using this template. Accesing the page will list the latest posts from all WPMS network sites except the main site.
< ?php
/**
 * Template Name: WPMS Recent Posts
 * Description: A Page Template that display recent posts from all WPMS network
 * Author: Richard Vencu
 * Template url: http://richardconsulting.ro/blog/WPMS_template_latest_network_posts/
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */
get_header(); 
/////////////  RETRIEVE SORTED LATEST POSTS FROM WPMS NETWORK (EXCEPT MAIN SITE)  /////////////////////
/*
Parameters
==========
$how_many (integer): how many recent posts are being displayed.
$how_long_days (integer): time frame to choose recent posts from (in days).
$sort_by (string - post_date/post_modified/post_title/comment_count/): You can short the lattest post by positing date (post_date) or posting update (post_modified).
$sort_order (constant - SORT_ASC or SORT_DESC, default is SORT_DESC
Returns
======
Array of blog ID and post ID in ordered form
*/
function wpms_latest_post($how_many = 10, $how_long_days = 30, $sort_by = 'post_date', $sort_order = SORT_DESC ) {
	global $wpdb;
	//first, gat all PUBLIC blog id
	$query = "SELECT blog_id FROM $wpdb->blogs WHERE blog_id != '1' AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0'";
	$blogs = $wpdb->get_col($wpdb->prepare($query) );
	$recentPosts = array();
	/* Build query args, we retrieve the $how_many number from each site since maybe there are sites with zero recent posts */
	$args = array(
		'post_type' 		=> 'post',
		'post_status' 		=> 'publish',
		'numberposts' 		=> $how_many
	);
	if ( is_array($blogs) ) {
		/* filter_where - filtering function that will add our where clause to the query */
		$filter_where = create_function ('$where','return $where .= " AND post_date > \'' . date('Y-m-d', strtotime('-' . $how_long_days . ' days')) . '\'";');
		add_filter( 'posts_where', $filter_where );
		foreach ($blogs as $blog) {
			switch_to_blog( absint($blog) );
			$recentQuery = new WP_Query();
			$recentQuery = get_posts( $args );
			foreach ( $recentQuery as $post ) {
				$recentPosts[] = array(
					'blog' 		=> $blog,
					'post' 		=> $post->ID,
					'post_date' 	=> $post->post_date,
					'post_modified'	=> $post->post_modified,
					'post_title' 	=> $post->post_title,
					'comment_count'	=> $post->comment_count
					);
			}
			wp_reset_query();
			restore_current_blog();
		}
		remove_filter( 'posts_where', $filter_where );
		/* Sort posts by field and trim to the requested number of posts */
		foreach ($recentPosts as $key => $row) {
		$sortkey[$key]  = $row[$sort_by];
		}
		array_multisort($sortkey, $sort_order, $recentPosts);
		return array_slice( $recentPosts, 0, $how_many );
	}
}
?>
		
			
				< ?php the_post(); ?>
				< ?php get_template_part( 'content', 'page' ); ?>
				< ?php if ( function_exists('wpms_latest_post') ) {
					$query = wpms_latest_post();
				 if ( !empty( $query )) { ?>
							< ?php /* Start the Loop */ ?>
							< ?php foreach ( $query as $netpost ) { 
								switch_to_blog( $netpost['blog'] );
								query_posts ( 'p=' . $netpost['post'] );
								if ( have_posts() ) {
									the_post();
									get_template_part( 'content', get_post_format() );
									}
								wp_reset_query();
								restore_current_blog(); 
								} ?>
						< ?php }
					} ?>
				< ?php comments_template( '', true ); ?>
			
		
< ?php get_footer(); ?>
Leave a Reply
You must be logged in to post a comment.