La función de WordPress switch_to_blog()
espera un número entero como parámetro de entrada. Puede leer más al respecto en el Codex:
http://codex.wordpress.org/Function_Reference/switch_to_blog
Por favor, intente este tipo de estructura en su lugar:
// 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 );
Actualizar:
Si desea obtener publicaciones de diferentes categorías para cada blog, puede usar, por ejemplo:
// 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 );
Ejemplo:
Aquí hay un ejemplo que le permite usar etiquetas de plantilla (esto funciona en mi instalación multisitio):
// 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();
Aquí hay una captura de pantalla de demostración para nuestro ejemplo anterior con el sitio 1 llamado Beethoven y el sitio 4 llamado Bach :
PD: Gracias a @brasofilo por proporcionar el enlace que aclara mi malentendido de la restore_current_blog()
;-)
PPS: Gracias a @ChristineCooper por compartir el siguiente comentario:
Solo una amistosa advertencia. Asegúrate de no configurar la identificación original de tu blog como variable $blog_id
; esto se debe a que durante el switch_to_blog()
proceso, $blog_id
la función principal será anulada, lo que significa que cuando intentes volver al blog original, terminarás cambiando al último uno por el que pasaste. Un pequeño rompecabezas mental. :)
the_title()
lugar de$post->post_title
;-) Espero haberte dado suficiente información para que puedas terminar tu proyecto.foreach($rightbox as $post)
conforeach($posts as $post)
en su empanada.Eche un vistazo al código en mi complemento "Lector de publicaciones múltiples" https://wordpress.org/plugins/multisite-post-reader/ . Utiliza la técnica en la otra respuesta para recorrer las publicaciones. También tengo complementos que hacen lo mismo para las imágenes.
Dado que es un código de código abierto, puede pasear por el código y usar partes para su propio uso. (Parte del código se modifica del código abierto que encontré).
fuente