Mostrar últimas entradas de blogs en WordPress multisitio

  • Autor Autor gusta1996
  • Fecha de inicio Fecha de inicio
gusta1996

gusta1996

VIP
Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Como mostrar Últimas entradas de la red en wordpress multisitio?

Hola foro como estan?
esto es algo que no encontre en ningun lugar de internet y tampoco me pudo ayudar chatgpt (de daba codigo con error)
si alguien sabe como hacer esto con php o javascript en wordpress le agradeceria mucho que me lo pusiera en los comentarios

la razon es porque tengo un wordpress multisitio con varios blog, y en la pagina principal quiero mostrar una lista de entradas de todos los blogs (titulo, imagen, categoria)

lo unico que encontre es en elementor, que si tiene esa opcion pero no me gusta su estilo
1694917315433.webp
 
Hola, puedes probar con el plugin 'WordPress MU Sitewide Tags Pages'. Este crea un blog adicional en tu red que toma entradas de todos tus sitios y las agrupa en uno. Solo en el sitio de tags puedes mostrar la lista de las últimas entradas de todos los blogs en tu red.

Si prefieres hacer tu propio código, puedes usar la función switch_to_blog() de WordPress Multisite para cambiar al blog que quieras y luego usar WP_Query o alguna otro método para obtener las últimas entradas de ese blog. Recuerda volver al blog principal utilizando restore_current_blog().

Espero que esta información te sea útil. Si necesitas más detalles no dudes en preguntar.
 
no logre hacerlo
Hola, puedes probar con el plugin 'WordPress MU Sitewide Tags Pages'. Este crea un blog adicional en tu red que toma entradas de todos tus sitios y las agrupa en uno. Solo en el sitio de tags puedes mostrar la lista de las últimas entradas de todos los blogs en tu red.

Si prefieres hacer tu propio código, puedes usar la función switch_to_blog() de WordPress Multisite para cambiar al blog que quieras y luego usar WP_Query o alguna otro método para obtener las últimas entradas de ese blog. Recuerda volver al blog principal utilizando restore_current_blog().

Espero que esta información te sea útil. Si necesitas más detalles no dudes en preguntar.
 
No tengo nada a mano para probarlo, pero con swtich_to_blog como te ha dicho el bot deberías poder.

Te copio aqui la respuesta de chatgpt4, que debería funcionarte sin problemas:

Insertar CODE, HTML o PHP:
Mostrar las últimas entradas de todos tus sitios en una instalación de WordPress Multisite en la página de inicio del sitio principal es un proceso que implica varios pasos. Aquí hay una guía general sobre cómo hacerlo:

### Paso 1: Crear un nuevo archivo PHP o usar `functions.php`
Puedes añadir el código necesario en el archivo `functions.php` del tema que estás utilizando en el sitio principal. También puedes crear un nuevo archivo PHP y añadirlo como un plugin de WordPress.

### Paso 2: Consultar las últimas entradas de cada sitio
Para obtener las últimas entradas de cada sitio en una red de WordPress Multisite, puedes utilizar la función `switch_to_blog()` para cambiar entre sitios y realizar consultas.

### Paso 3: Mostrar los resultados en la página de inicio
Después de obtener las últimas entradas, puedes mostrarlas en la página de inicio utilizando WordPress Loop.

### Código de ejemplo

```php
// Añade esta función en tu functions.php o en un archivo PHP separado
function mostrar_ultimas_entradas_multisite() {
    // Obtener la lista de sitios
    $blogs = get_sites();
    
    // Iniciar el output
    $output = '<div class="ultimas-entradas-multisite">';
    
    // Iterar a través de cada sitio
    foreach ($blogs as $blog) {
        // Cambiar al blog
        switch_to_blog($blog->blog_id);
        
        // Realizar una consulta para obtener las últimas entradas
        $args = array(
            'post_type' => 'post',
            'posts_per_page' => 5,  // Cambia este número para mostrar más o menos entradas
        );
        $query = new WP_Query($args);
        
        if ($query->have_posts()) {
            $output .= '<h2>' . get_bloginfo('name') . '</h2>';
            while ($query->have_posts()) {
                $query->the_post();
                $output .= '<a href="' . get_the_permalink() . '">' . get_the_title() . '</a><br>';
            }
        }
        
        // Restaurar el blog original
        restore_current_blog();
    }
    
    // Cerrar el output
    $output .= '</div>';
    
    // Mostrar el output
    echo $output;
}

// Usar un hook para insertar la función donde quieras que aparezca
// Por ejemplo, puedes añadirlo en una plantilla de tu tema
```

Este es un ejemplo simple y puedes personalizarlo según tus necesidades. Asegúrate de hacer pruebas antes de aplicarlo en un entorno de producción.

Si tienes algún error, deberías postearlo aquí para poder ayudarte.

Si todo está ok deberías implementar un sistema de cache para que no consuma la cpu todo el rato, tipo:

Insertar CODE, HTML o PHP:
// Añade esta función en tu functions.php o en un archivo PHP separado
function mostrar_ultimas_entradas_multisite() {
    // Intenta obtener el resultado del cache (transient)
    $output = get_transient('ultimas_entradas_multisite_cache');
    
    // Si el cache no existe, generar el contenido
    if (false === $output) {
        // Obtener la lista de sitios
        $blogs = get_sites();
        
        // Iniciar el output
        $output = '<div class="ultimas-entradas-multisite">';
        
        // Iterar a través de cada sitio
        foreach ($blogs as $blog) {
            // Cambiar al blog
            switch_to_blog($blog->blog_id);
            
            // Realizar una consulta para obtener las últimas entradas
            $args = array(
                'post_type' => 'post',
                'posts_per_page' => 5,  // Cambia este número para mostrar más o menos entradas
            );
            $query = new WP_Query($args);
            
            if ($query->have_posts()) {
                $output .= '<h2>' . get_bloginfo('name') . '</h2>';
                while ($query->have_posts()) {
                    $query->the_post();
                    $output .= '<a href="' . get_the_permalink() . '">' . get_the_title() . '</a><br>';
                }
            }
            
            // Restaurar el blog original
            restore_current_blog();
        }
        
        // Cerrar el output
        $output .= '</div>';
        
        // Almacenar el resultado en el cache (transient) durante 1 hora
        set_transient('ultimas_entradas_multisite_cache', $output, HOUR_IN_SECONDS);
    }
    
    // Mostrar el output
    echo $output;
}

// Usar un hook para insertar la función donde quieras que aparezca
// Por ejemplo, puedes añadirlo en una plantilla de tu tema
 
si funciona, pero yo tenia en mente mostrar los post de los blog mezclados por fecha (sin separar por blog)

1694962458801.webp
 
si funciona, pero yo tenia en mente mostrar los post de los blog mezclados por fecha (sin separar por blog)

Ver el archivo adjunto 1097199

Insertar CODE, HTML o PHP:
function mostrar_ultimas_entradas_multisite() {
    // Intenta obtener el resultado del cache (transient)
    $output = get_transient('ultimas_entradas_multisite_cache');
   
    // Si el cache no existe, generar el contenido
    if (false === $output) {
        // Obtener la lista de sitios
        $blogs = get_sites();
       
        // Matriz para almacenar todas las entradas
        $all_posts = array();
       
        // Iterar a través de cada sitio
        foreach ($blogs as $blog) {
            // Cambiar al blog
            switch_to_blog($blog->blog_id);
           
            // Realizar una consulta para obtener las últimas entradas
            $args = array(
                'post_type' => 'post',
                'posts_per_page' => 5,  // Cambia este número para mostrar más o menos entradas
            );
            $query = new WP_Query($args);
           
            if ($query->have_posts()) {
                while ($query->have_posts()) {
                    $query->the_post();
                    $all_posts[] = array(
                        'title' => get_the_title(),
                        'permalink' => get_the_permalink(),
                        'date' => get_the_date('U'),  // U para obtener en formato Unix timestamp
                        'blog_name' => get_bloginfo('name'),
                    );
                }
            }
           
            // Restaurar el blog original
            restore_current_blog();
        }

        // Ordenar todas las entradas por fecha
        usort($all_posts, function($a, $b) {
            return $b['date'] - $a['date'];
        });
       
        // Iniciar el output
        $output = '<div class="ultimas-entradas-multisite">';
       
        // Generar el output para las entradas ordenadas
        foreach ($all_posts as $post) {
            $output .= '<a href="' . $post['permalink'] . '">' . $post['title'] . '</a> (' . $post['blog_name'] . ')<br>';
        }

        // Cerrar el output
        $output .= '</div>';
       
        // Almacenar el resultado en el cache (transient) durante 1 hora
        set_transient('ultimas_entradas_multisite_cache', $output, HOUR_IN_SECONDS);
    }
   
    // Mostrar el output
    echo $output;
}

Pero ten cuidado con la cantidad de blogs que tienes y la cantidad de posts que muestras por blog... Si te pasas podría usar mucha CPU.

Con aproximadamente 5 wordpress multisite y unos 5 o 10 posts a mostrar por blog, no debería ocurrir nada, depende de tu servidor.

Si necesitas mostrar imagen por post, que quede un listado más bonito etc... Con ese código y chatgpt no creo que tengas problemas para hacerlo por tu cuenta.
 
Atrás
Arriba