¿Obtener publicaciones de sitios en Multisite?

15

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

Pero estoy tratando de sacar ambas publicaciones de dos blogs multisitios separados 1 & 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 lograr 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 ?>
    
pregunta DeadArtcore 10.05.2013 - 05:25

2 respuestas

11

La función de WordPress switch_to_blog() espera un entero como parámetro de entrada. Puede leer más sobre esto en el Codex:

enlace

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 ); 

Actualización:

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 :

PS:Graciasa@brasofiloqueproporcionaelenlace eso aclara mi interpretación errónea de 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   variable $blog_id - esto se debe a que durante el switch_to_blog()   proceso, $blog_id será reemplazado por la función principal, es decir, qué   cuando intentes volver al blog original, terminarás con   cambiando al último por el que pasaste. Un poco de un   rompecabezas mental :)

    
respondido por el birgire 10.05.2013 - 10:24
0

Eche un vistazo al código en mi complemento "Multisite Post Reader" enlace . Utiliza la técnica en la otra respuesta para recorrer las publicaciones. También tengo complementos que hacen lo mismo con 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 modificó con el código de código abierto que encontré).

    
respondido por el Rick Hellewell 15.09.2018 - 19:30

Lea otras preguntas en las etiquetas