スポンサーリンク

マルチブログで他のブログの新着記事一覧を表示する

マルチサイト時に子ブログの最新記事一覧などを
表示させる場合のショートコードを作成しましたので掲載。

function.phpに以下を作成。

コード

///////////////////////////////////////////////
// マルチブログ対応 新着記事一覧
// [multisite_post_list]
// total_posts_per_page・・・totalで取得表示する数:default=20;
// exclude_blogid…除外するブログ番号。default=1
function multisite_post_list_func($atts) {
	global $wpdb;
	global $post;
	
	$s = ( shortcode_atts(array(
		'total_posts_per_page' => 20,
		'exclude_blogid' => 1,
	), $atts) );
	extract( $s, EXTR_SKIP );
	
	$query_args = array(
		'posts_per_page' => intval($total_posts_per_page),
		'order' => 'desc',
		'orderby' => 'date'
	);

	$temp_exclude_blogid = explode(',', $exclude_blogid );
	$exclude_blogid = array_map( "trim", $temp_exclude_blogid );
	
	$post_date = array();
	$post_list = array();
	$sites = get_last_updated();
	
	foreach( $sites as $site ) {
		if ( !in_array($site['blog_id'], (array)$exclude_blogid ) ) {
			switch_to_blog($site['blog_id']);
			
			$custom_query = new WP_Query( $s );
			if( $custom_query->have_posts() ) {
				while ( $custom_query->have_posts()) {
					$custom_query->the_post();
					$post_date[] = $post->post_date;
					$post_list[] = array(
						"link" => get_permalink(),
						"title" => get_the_title('','',false),
						"blog_id" => $site['blog_id'],
					);
				}
			}
			wp_reset_query();
			restore_current_blog();
		}
	}
	
	// 投稿日時で並べ替える
	arsort( $post_date );
	reset( $post_date );

	// 指定個数にカット
	$post_date = array_slice($post_date, 0, intval($total_posts_per_page), true);

	$resword = '';
	$resword .= '<dl class="multisite_post_list">'."\n";
	foreach( $post_date as $key => $value ) {
		$resword .= '<dt>';
		$resword .= '<span class="date">';
		$resword .= mysql2date('Y年m月d日 H時i分',$value, false);
		$resword .= '</span>';
		$resword .= '</dt>'."\r\n";
		$resword .=  '<dd>'."\r\n";
		$resword .= '<a href="'.$post_list[$key]["link"].'" rel="bookmark" title="'.$post_list[$key]["link"].'.">';
		$resword .= $post_list[$key]["title"];
		$resword .= '</a>'."\r\n";
		$resword .= '('.get_blog_option($post_list[$key]["blog_id"], 'blogname').')';
		$resword .= '</dd>'."\r\n";
	}
	$resword .= '</dl>'."\r\n";

	return $resword;
}
add_shortcode('multisite_post_list', 'multisite_post_list_func');

使い方

表示したいページ編集にて(ビジュアルじゃなくテキストで)

[multisite_post_list]

と記述してください。
デフォルトで20件、親であるブログIDの1
が除外されて表示されます。

件数変えたい場合は
total_posts_per_page
という引数を付ける

例)10件にしたい場合
[multisite_post_list total_posts_per_page=”10″]

更にブログで除外したいのがある場合は
exclude_blogid
という引数でブログIDを指定(複数時は,(カンマ)区切り)

例)ブログIDの2,3を除外する場合
[multisite_post_list exclude_blogid=”2,3″]

となります。

補足

あくまで最新記事一覧と言う感じです。
ページングなど本格的に一覧を作成する場合は
SQLから書かないと無理だと思います。
(多分UNION ALLとかで結合して取得???)

[`evernote` not found]