it-swarm-es.com

Obtener publicaciones de sitios en Multisite?

Estoy tratando de tirar publicaciones de varios sitios. Por ejemplo, puedo sacar un solo sitio de publicaciones por categoría y total de publicaciones 10.

Pero estoy tratando de sacar las dos publicaciones de dos blogs multisitios 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 ?>
16
DeadArtcore

La función de WordPress switch_to_blog() espera un entero como parámetro de entrada. Puedes leer más sobre esto 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 utilizar, 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:

Este es 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 de nuestro ejemplo anterior con el sitio 1 llamado Beethoven y el sitio 4 llamado Bach :

 demo 

PD: Gracias a @brasofilo que proporcionó el enlace que aclara mi interpretación errónea de la restore_current_blog() ;-)

PPS: Gracias a @ChristineCooper por compartir el siguiente comentario:

Sólo una advertencia amistosa. Asegúrese de no establecer su ID de blog original en la variable $blog_id - esto se debe a que durante el proceso switch_to_blog(), $blog_id será anulado por la función principal, es decir, que cuando intente volver al blog original, terminará cambiando hasta el último por el que pasaste. Un poco de un rompecabezas mental. :)

11
birgire

Eche un vistazo al código en mi plugin "Multisite Post Reader" https://wordpress.org/plugins/multisite-post-reader/ . Utiliza la técnica en la otra respuesta para recorrer los mensajes. También tengo complementos que hacen lo mismo para las imágenes.

Ya que es un código de código abierto, puede recorrer el código y utilizarlo para su propio uso. (Parte del código se modifica a partir del código de código abierto que encontré).

0
Rick Hellewell