¿Cómo obtener entradas de sitios en Multisite?

10 may 2013, 06:25:46
Vistas: 38.4K
Votos: 20

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

Pero estoy intentando extraer entradas de dos blogs separados de Multisite 1 y 2. Pero solo funciona el blog 1. Además, quiero extraer otra categoría del blog 1 y 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); //cambiado a 1 y 2 pero solo funciona el 1

// Obtener últimas Entradas
$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(); //volver al sitio principal ?>
0
Todas las respuestas a la pregunta 2
23
15

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, prueba este tipo de estructura en su lugar:

// Obtener el ID del blog actual
$original_blog_id = get_current_blog_id(); 

// Todos los blog_id's para iterar
$bids = array( 1, 2 ); 

foreach( $bids as $bid )
{
    // Cambiar al blog con el blog_id $bid
    switch_to_blog( $bid ); 

    // ... tu código para cada blog ...
}

// Volver al blog actual
switch_to_blog( $original_blog_id ); 

Actualización:

Si deseas obtener publicaciones de diferentes categorías para cada blog, puedes usar por ejemplo:

// Obtener el blog actual
$original_blog_id = get_current_blog_id(); 

// Configurar un slug de categoría para cada blog id que quieras iterar - EDITAR
$catslug_per_blog_id = array( 
    1 => 'video',
    4 => 'noticias' 
); 

foreach( $catslug_per_blog_id as $bid => $catslug )
{
    // Cambiar al blog con el blog id $bid
    switch_to_blog( $bid ); 

    // ... tu código para cada blog ...
    $myposts = get_posts( 
        array( 
            'category_name'  => $catslug,
            'posts_per_page' => 10, 
        )
    );
    // ... etc
}

// Volver al blog actual
switch_to_blog( $original_blog_id ); 

Ejemplo:

Aquí hay un ejemplo que te permite usar etiquetas de plantilla (esto funciona en mi instalación multisitio):

// Obtener el blog actual
$original_blog_id = get_current_blog_id();

// Configurar una categoría para cada blog id que quieras iterar - EDITAR
$catslug_per_blog_id = array( 
    1 => 'video',
    4 => 'noticias' 
); 

foreach( $catslug_per_blog_id as $bid => $catslug )
{
    // Cambiar al blog con el blog id $bid
    switch_to_blog( $bid ); 

    // Obtener publicaciones para cada blog
    $myposts = get_posts( 
        array( 
            'category_name'  => $catslug,
            'posts_per_page' => 2, 
        )
    );

    // Saltar un blog si no se encuentran publicaciones
    if( empty( $myposts ) )
        continue;

    // Bucle para cada 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
        );
    }

    // Imprimir para cada blog
    printf(
        '<h2>%s (%s)</h2><ul>%s</ul>',
        esc_html( get_bloginfo( 'name' ) ),
        esc_html( $catslug ),
        $li  
    );
}

// Volver al blog actual
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:

demo

PD: Gracias a @brasofilo por proporcionar el enlace que aclara mi malentendido sobre restore_current_blog() ;-)

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

Solo una advertencia amistosa. Asegúrate de no asignar tu ID de blog original a la variable $blog_id -- esto se debe a que durante el proceso de switch_to_blog(), $blog_id será sobrescrito por la función principal, lo que significa que cuando intentes volver al blog original, terminarás cambiando al último que iteraste. Un pequeño rompecabezas mental. :)

10 may 2013 11:24:37
Comentarios

aquí está cómo cargo mis publicaciones http://pastie.org/7827649 ¿cómo puedo implementar eso en esto también como mencioné, por ambos IDs de blog pero cada ID de blog con categoría específica? El blog 1 tendrá la categoría videos y el blog 2 tendrá la categoría noticias, también obtener un total de 10 publicaciones como límite.

DeadArtcore DeadArtcore
10 may 2013 20:20:32

Actualicé la respuesta para soportar diferentes categorías.

birgire birgire
10 may 2013 21:39:59

Revisa esto: restore_current_blog() vs switch_to_blog()

brasofilo brasofilo
10 may 2013 23:22:31

@brasofilo, muchas gracias por el enlace, esto cambia mi perspectiva sobre restore_current_blog() ;-)

birgire birgire
11 may 2013 00:17:19

Stephen Harris hizo lo mismo por mí :)

brasofilo brasofilo
11 may 2013 02:03:36

Intentaré transmitirlo a mis compañeros usuarios de wp ;-)

birgire birgire
11 may 2013 12:10:41

todavía estoy encontrando un problema, solo muestra una publicación en el blog multisitio original, eso es todo, así es como lo hice http://pastie.org/7831263

DeadArtcore DeadArtcore
11 may 2013 18:57:00

¿alguien puede ayudarme?..

DeadArtcore DeadArtcore
11 may 2013 20:26:26

Prueba el ejemplo simple que agregué a la respuesta, y asegúrate de que tus blogs y categorías sean correctos. Si eso funciona, entonces deberías poder expandirlo según tus necesidades.

birgire birgire
11 may 2013 21:46:06

en tu versión pastie número 2, tu código debería estar dentro del bucle foreach donde marqué // ... etc

birgire birgire
11 may 2013 21:54:25

pd: actualicé el ejemplo nuevamente, para que puedas usar etiquetas de plantilla como the_title() en lugar de $post->post_title ;-) Espero haberte dado suficiente información para que puedas terminar tu proyecto.

birgire birgire
11 may 2013 22:08:19

gracias, te avisaré si funcionó. ¡Gracias por tu increíble ayuda! :D

DeadArtcore DeadArtcore
11 may 2013 22:09:59

ok genial, buena suerte ;-)

birgire birgire
11 may 2013 22:11:57

mira, el problema es que todo se muestra suave pero muestra todo en lista, ya sabes como lo publiqué en mi pastie, así es como lo quiero porque simplemente poner título y todo eso es un poco complicado para mí, no tengo mucho conocimiento, ¿hay alguna manera de lograrlo de la forma simple que lo tenía? ¿hay alguna manera de mantenerlo así? http://pastie.org/7896095 disculpa por ser una molestia espero que entiendas

DeadArtcore DeadArtcore
11 may 2013 22:32:26

Reemplaza foreach($rightbox as $post) con foreach($posts as $post) en tu pastie.

birgire birgire
12 may 2013 01:27:14

Recibo un error Parse error: syntax error, unexpected $end en el index.php así que simplemente agregué ese código en el index.php por sí solo y obtengo ese error, aquí está la versión actualizada http://pastie.org/7896699

DeadArtcore DeadArtcore
12 may 2013 02:13:55

¿Alguien puede ayudarme a resolver esto?..

DeadArtcore DeadArtcore
12 may 2013 08:36:41

Solo una advertencia amistosa. Asegúrate de no asignar tu ID de blog original a la variable $blog_id -- esto se debe a que durante el proceso switch_to_blog(), $blog_id será sobrescrito por la función principal, lo que significa que cuando intentes volver al blog original, terminarás cambiando al último que recorriste. Un pequeño rompecabezas mental. :)

Christine Cooper Christine Cooper
2 abr 2016 18:37:30

gracias por compartir esa información @ChristineCooper. Parece que usé $original_blog_id aquí para evitar sobrescribir $blog_id ;-)

birgire birgire
2 abr 2016 20:25:48

Espero que esté bien que agregué tu comentario a la respuesta actualizada @ChristineCooper

birgire birgire
3 abr 2016 01:48:47

¡Hola! Me gustaría preguntar, ¿cómo lo implemento para que funcione? ¿Pongo este código en mi tema o lo agrego al functions.php? ¡Gracias!

Jornes Jornes
26 abr 2020 10:27:32

¡Gracias! Le echaré un vistazo. Tengo otro problema que no se ha solucionado todavía ya que no se dio ninguna respuesta. ¿Puedes ayudar con esto? Realmente necesito una solución para esto. ¡Gracias!

Jornes Jornes
26 abr 2020 13:22:53
Mostrar los 18 comentarios restantes
0

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

Como es código de código abierto, eres bienvenido a explorar el código y utilizar partes de él para tu propio uso. (Parte del código está modificado de código de código abierto que encontré).

15 sept 2018 20:30:50