質問: get_posts('&cat=64&showposts=10'); $cnt =0;?> <ul> <?php foreach($latest_posts as $post) : setup_postdata($post);?> <li> <a href="<?php echo get_page_link($post->id); ?>" title="<?php echo $post->post_title; ?>"><?php echo short_title('...', 7); ?></a> </li> <?php endforeach ; ?> <?php restore_current_blog(); //switched back to main site ?>
回答: wordpress関数switch_to_blog()は入力パラメータとして整数を期待します。あなたはコーデックスでそれについてもっと読むことができます: http://codex.wordpress.org/function_reference/switch_to_blog 代わりにこの種の構造を試してください。// get the current blog id $original_blog_id = get_current_blog_id(); // all the blog_id's to loop through $bids = array( 1, 2 ); foreach( $bids as $bid ) { // switch to the blog with the blog_id $bid switch_to_blog( $bid ); // ... your code for each blog ... } // switch back to the current blog switch_to_blog( $original_blog_id ); 更新:ブログごとに異なるカテゴリから投稿を取得する場合は、次のようにします。// get current blog $original_blog_id = get_current_blog_id(); // setup a category slug for each blog id, you want to loop through - edit $catslug_per_blog_id = array( 1 => 'video', 4 => 'news' ); foreach( $catslug_per_blog_id as $bid => $catslug ) { // switch to the blog with the blog id $bid switch_to_blog( $bid ); // ... your code for each blog ... $myposts = get_posts( array( 'category_name' => $catslug, 'posts_per_page' => 10, ) ); // ... etc } // switch back to the current blog switch_to_blog( $original_blog_id ); 例:これはテンプレートタグを使うことができる例です(これは私のマルチサイトインストールで動作します):// get current blog $original_blog_id = get_current_blog_id(); // setup a category for each blog id you want to loop through - edit $catslug_per_blog_id = array( 1 => 'video', 4 => 'news' ); foreach( $catslug_per_blog_id as $bid => $catslug ) { //switch to the blog with the blog id $bid switch_to_blog( $bid ); // get posts for each blog $myposts = get_posts( array( 'category_name' => $catslug, 'posts_per_page' => 2, ) ); // skip a blog if no posts are found if( empty( $myposts ) ) continue; // loop for each blog $li = ''; global $post; foreach( $myposts as $post ) { setup_postdata( $post ); $li .= the_title( $before = sprintf( '<li><a href="%s">', esc_url( get_permalink() ) ), $after = '</a></li>', $echo = false ); } // print for each blog printf( '<h2>%s (%s)</h2><ul>%s</ul>', esc_html( get_bloginfo( 'name' ) ), esc_html( $catslug ), $li ); } // switch back to the current blog switch_to_blog( $original_blog_id ); wp_reset_postdata(); これが、上記の例のデモスクリーンショットです。サイト1の名前は beethoven 、サイト4の名前は bach : ps:@brasofiloが link を提供してくれて、restore_current_blog() ;-)に対する私の誤解が明確になりました。pps:次のコメントを共有してくれた@christinecooperに感謝: ただの警告です。元のブログidを変数$blog_idに設定しないようにしてください。これは、switch_to_blog()プロセス中に$blog_idがコア関数によってオーバーライドされるためです。最後にループしたものまで。ちょっと気が遠くなるようなパズル。 :)