Obtener publicaciones de sitios en Multisite?

17

Estoy tratando de extraer publicaciones de múltiples sitios. Por ejemplo, puedo extraer publicaciones de un solo sitio por categoría y un total de publicaciones 10.

Pero estoy tratando de sacar ambas publicaciones de dos blogs multisitio separados 1 y 2. Pero solo el blog 1 funciona. Además, quiero sacar otra categoría del blog 1 y el blog 2 por otra categoría. ¿Cómo puedo conseguir esto?

Esto es lo que estoy tratando de hacer:

<?php
global $switched;
switch_to_blog(1,2); //switched to 1 & 2 but only 1 working

// Get latest Post
$latest_posts = 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 ?>
DeadArtcore
fuente

Respuestas:

12

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 :

manifestación

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_idla 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. :)

Birgire
fuente
así es como cargo mis publicaciones pastie.org/7827649 cómo puedo implementar eso en esto también como lo menciono por ambos identificadores de blog, pero cada ID de blog por categoría específica el blog 1 tendrá videos de categoría y el blog 2 tendrá las noticias de categoría también Un total de mensajes de 10 límite.
DeadArtcore
1
Actualicé la respuesta para admitir diferentes categorías.
Birgire
1
ps: actualicé el ejemplo nuevamente, para que puedas usar etiquetas de plantilla como en the_title()lugar de $post->post_title;-) Espero haberte dado suficiente información para que puedas terminar tu proyecto.
Birgire
1
Reemplace foreach($rightbox as $post)con foreach($posts as $post)en su empanada.
Birgire
1
Espero que esté bien que agregué tu comentario a la respuesta actualizada @ChristineCooper
birgire
0

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é).

Rick Hellewell
fuente