WP_query para obtener las dos últimas entradas, luego otro bucle para obtener las tres siguientes

3 feb 2016, 00:38:33
Vistas: 36.7K
Votos: 5

Mi objetivo final es listar las 5 últimas entradas, independientemente de la categoría.

Primero me gustaría hacer una consulta WP_Query para obtener las dos últimas entradas e insertarlas en una estructura HTML específica.

Luego me gustaría hacer otra consulta WP_Query para obtener las tres entradas siguientes e insertarlas en una estructura HTML diferente.

He probado algunos fragmentos de código y lo que sucede es que cada WP_Query comienza desde la última entrada en ambas estructuras HTML. ¿Hay algún argumento que pueda usar para indicarle específicamente a la segunda consulta que omita las dos primeras entradas?

2
Comentarios

También en mi opinión puedes hacerlo con una sola consulta.

Laxmana Laxmana
3 feb 2016 00:42:28
Todas las respuestas a la pregunta 2
5

Ejecuta una consulta WP_Query para obtener post_per_page = 2 y guardar los IDs de esos 2 posts en un array para excluirlos en los siguientes 3 posts necesarios

<?php

    // La Consulta
    $next_args = array(
                    'post_type' => '<tu_tipo_de_post>',
                    'post_status' => 'publish',
                    'posts_per_page'=>2,
                    'order'=>'DESC',
                    'orderby'=>'ID',
                    );

    $the_query = new WP_Query( $args );

    // El Loop
    if ( $the_query->have_posts() ) {
        $not_in_next_three = array();
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            //tu html aquí para los últimos 2
            $not_in_next_three[] = get_the_ID();
        }

    } else {
        // no se encontraron posts
    }
    /* Restaurar los datos originales del Post */
    wp_reset_postdata();

Ahora el array creado arriba se usará para excluir esos posts en la WP_Query que obtendrá los siguientes 3 posts

// La Consulta
$next_args = array(
                'post_type' => '<tu_tipo_de_post>',
                'post_status' => 'publish',
                'posts_per_page'=>3,
                'order'=>'DESC',
                'orderby'=>'ID',
                'post__not_in'=>$not_in_next_three
                );
$next_the_query = new WP_Query( $next_args );

// El Loop
if ( $next_the_query->have_posts() ) {
    while ( $next_the_query->have_posts() ) {
        $next_the_query->the_post();
        //tu html aquí para los siguientes 3 posts

    }

} else {
    // no se encontraron posts
}
/* Restaurar los datos originales del Post */
wp_reset_postdata();

?>
3 feb 2016 12:17:10
Comentarios

Añade alguna explicación a tu código y el método que estás usando. Esto claramente se puede hacer con una sola consulta, no con 2

Pieter Goosen Pieter Goosen
3 feb 2016 12:18:54

Sí, se puede hacer con una sola consulta... pero el autor de la pregunta ha solicitado usar 2 wp_query... por eso...

Prakash Rao Prakash Rao
3 feb 2016 12:19:59

Revisa la respuesta editada ahora @peiter Goosen

Prakash Rao Prakash Rao
3 feb 2016 12:23:05

Resolví este problema realizando dos WP_Query en la misma página y usando un parámetro de offset en el segundo conjunto de argumentos.

Me gustaría saber cómo usar una sola consulta y lograr el mismo resultado.

C. Ruben C. Ruben
11 feb 2016 00:59:43

Se puede hacer con un solo wp_query incrementando un contador y cambiando la estructura HTML en base al contador.

Prakash Rao Prakash Rao
11 feb 2016 14:56:37
0

Puedes usar los parámetros de paginación de WP_Query.

Sin embargo, usar dos consultas para lograr este objetivo es ineficiente. Una mejor solución es usar una sola consulta y modificar tu marcado basado en el valor de la propiedad $current_post de WP_Query, que (cuando se usa en el bucle) refleja el índice de la publicación actual que se está procesando dentro de la página actual de resultados.

3 feb 2016 00:45:59