Obtenga publicaciones recientes por fecha en Multisite

4

Todo lo que se explica es sobre CDTuts

He creado una Red de WordPress y lo que quiero es obtener las publicaciones recientes de todos los blogs de subdominios seleccionados. Necesito obtener el último Todos organizado por fecha y no organizado por blog ID .

No quiero usar switch_to_blog , por lo tanto, usar foreach, porque solo hago un bucle de publicaciones dentro de los próximos blogs que cambio. Quiero combinar las publicaciones y tenerlas todas organizadas por fecha. Me imagino que tendría que hacer esto consultando mysql en lugar de usar WP_Query. Pero esperaba una manera más nativa de hacer esto. Esto es para la lista de publicaciones que se realizarán en la parte inferior de la página principal, como puede ver con marcas de tiempo que no son ascendentes ni descendientes por el número mayor o menor.

Incluso intenté hacer algo como esto, pero esto tampoco funcionaría. Ordenar la publicación por la marca de tiempo de Unix, solo para darse cuenta de que las publicaciones aún están siendo organizadas por switch_to_blog en lugar de hacerlo de manera oportuna.

<?php           
    switch_to_blog(1);
    $main_posts = get_posts();
    switch_to_blog(2);
    $php_posts = get_posts();
    switch_to_blog(3);
    $wp_posts = get_posts();
    switch_to_blog(4);
    $mac_posts = get_posts();
    switch_to_blog(4);
    $psd_posts = get_posts();
    switch_to_blog(1);

    $posts = array_merge($main_posts, $php_posts, $wp_posts, $mac_posts, $psd_posts);
    usort($post, get_post_time);

    foreach($posts as $post){
    ?>
        <li class="thumb"><a href="<?php echo the_permalink(); ?>">
            <div class="site-name">
            </div>
            <div class="title">
                <?php echo the_title(); ?><br> <?php echo get_post_time(); ?>
            </div>
        </a></li>
    <?php }         
?>

También he creado una función donde puedo seleccionar el ID del blog usando switch_to_blog . Esto solo funcionará en las fichas en la parte superior de la página principal. Pero también estoy tratando de hacer lo mismo para las últimas publicaciones en la parte inferior. No podré crear un desplazamiento para poder mantener el diseño del mosaico manteniendo los 6 últimos mensajes.

Esto se basó en una respuesta anterior en StackExchange

function global_latest_post($LatestBlogNumber,$LatestPostNumber, $LatestThumbSize, $LatestThumbNumber) {
    $original_blog_id = get_current_blog_id();
    $bids = array($LatestBlogNumber);    

    foreach($bids as $bid) {
        switch_to_blog($bid);
        $tiles = new WP_Query('posts_per_page=1');
        while ($tiles->have_posts()) : $tiles->the_post(); ?>
            <a href="<?php echo the_permalink(); ?>" class="<?php echo $LatestThumbSize; ?> thumb-<?php echo $LatestThumbNumber; ?>">
                <p class="cover">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                <p class="bold bottom">Read More &rarr;</p>
                <h1><?php echo $LatestPostNumber; ?>. <?php echo the_title(); ?> in <?php bloginfo('name'); ?></h1>
            </a>
        <?php           
        endwhile;
    }
    switch_to_blog( $original_blog_id ); //switched back to current blog
}
    
pregunta Satan 04.10.2013 - 23:06

3 respuestas

1

Ya que wordpress multisite usa diferentes tablas para todos los blogs, es muy ineficiente obtener todos los artículos recientes de todos los blogs (agregación de contenido) en tiempo de visualización, ya que tiene que consultar todos los blogs, ordenar los artículos por fecha y mostrar el monto que necesita.

Los complementos como WordPress Post Indexer ( enlace ) adicional escriben todas las publicaciones en una tabla de base de datos en el momento en que Insertarlos o actualizarlos. A partir de ahí, puede consultarlos de manera muy eficiente.

Utilicé el complemento mencionado por mí mismo, vale la pena intentarlo. No estoy asociado con el creador.

También se deben tener en cuenta algunos aspectos: por ejemplo: si quieres mostrar metacampos personalizados, tendrás que usar switch_to_blog.

    
respondido por el jjarolim 19.04.2015 - 23:10
0

Echa un vistazo a mi respuesta en Obtener publicaciones de la red (Multisite) / a>. Mi plugin 'Multisite Post Reader' (gratuito, de código abierto) captura todas las publicaciones de todos los subsitios con opciones para limitar el conteo, la fecha, etc.

Probablemente es un poco "pesado" (ineficiente), como lo menciona @jjarolim, pero quizás el código te ayude en tus esfuerzos.

    
respondido por el Rick Hellewell 24.05.2017 - 19:28
0

Me doy cuenta de que esta pregunta es bastante "antigua", sin embargo, he encontrado una solución.

Es posible recuperar publicaciones de otros blogs en la red de sitios múltiples sin la necesidad de usar switch_to_blog(); o restore_current_blog(); .

/**
 * This is an example of retrieving posts from multiple blogs in Multisite.
 *
 * @author Michael Ecklund
 * @author_url https://www.michaelbrentecklund.com
 *
 * @param array $user_args
 *
 * @return array|bool|null|object
 */
function mbe_get_network_posts( Array $user_args = Array() ) {

    if ( ! is_multisite() ) {
        return false;
    }

    $default_args = array(
        'post_type'   => 'post',
        'post_status' => 'publish',
        'limit'       => absint( get_option( 'posts_per_page' ) ),
        'orderby'     => 'post_date',
        'order'       => 'DESC'
    );

    $args = wp_parse_args( $user_args, $default_args );

    $args['orderby'] = strtolower( $args['orderby'] );
    $args['order']   = strtoupper( $args['order'] );

    if ( ! in_array( $args['orderby'], array(
        'id',
        'post_title',
        'post_name',
        'post_date',
        'post_modified',
        'post_author',
        'blog_id'
    ) ) ) {
        return false;
    }

    if ( ! in_array( $args['order'], array(
        'ASC',
        'DESC'
    ) ) ) {
        return false;
    }

    global $wpdb;

    if ( ! $blog_ids = $wpdb->get_col( "SELECT DISTINCT blog_id FROM {$wpdb->blogs}" ) ) {
        return false;
    }

    $queries = array();

    $where = array(
        'post_type'   => $wpdb->prepare( "AND post_type = %s", $args['post_type'] ),
        'post_status' => $wpdb->prepare( "AND post_status = %s", $args['post_status'] ),
    );

    foreach ( $blog_ids as $blog_id ) {

        if ( $blog_id == 1 ) {
            $prefix = substr( $wpdb->base_prefix, 0, - 1 );
        } else {
            $prefix = $wpdb->base_prefix . $blog_id;
        }

        $queries[] = $wpdb->prepare(
            "
            ( 
                SELECT *, {$blog_id} AS blog_id
                FROM {$prefix}_posts
                WHERE 1=1 " . join( " ", $where ) . "
                ORDER BY {$args['orderby']}
                {$args['order']}
                LIMIT %d
            )
            ",
            absint( $args['limit'] )
        );

    }

    $query = join( "UNION", $queries ) . "ORDER BY {$args['orderby']} {$args['order']}";

    return $wpdb->get_results( $query );

}

Lo mantuve corto y al grano. Sin embargo, puede ampliar esto, permitiendo varios tipos de publicaciones o estados postales, etc.

Actualmente, con esta función anterior, puedes controlar el Tipo de publicación, Estado de publicación y ordenar por:

Opciones clasificables:

  • ID de publicación
  • Título de la publicación
  • Post Slug
  • Publicar fecha de publicación
  • Fecha de modificación de publicación
  • Publicar ID de autor
  • ID de blog

Observe los argumentos predeterminados para obtener una lista de argumentos que deben anularse para satisfacer sus necesidades específicas.

Pensé que compartiría esto como una posible solución para que alguien use una base para cualquier situación en la que necesites recuperar publicaciones en toda la red.

Además, puede modificarlo para devolver las ID de publicación, en lugar de todo. Luego, podría usar los ID de publicación en un new WP_Query(); para algo más complejo como consultas de Meta y / o consultas de Taxonomía, etc.

Espero que alguien encuentre esto útil.

    
respondido por el Michael Ecklund 25.05.2017 - 01:08

Lea otras preguntas en las etiquetas