Invertir el orden de las publicaciones DESPUÉS de realizar la consulta

3 abr 2012, 06:59:14
Vistas: 13.7K
Votos: 6

Estoy mostrando los últimos 5 posts de un tipo de publicación personalizado 'show'.

Esto me da el post más reciente primero.

<?php
$args = array(
    'post_type' => 'show',
    'posts_per_page' => 5,
    'order' => 'DESC'
    );
$home_shows = new WP_Query($args);
var_dump($home_shows);
?>

Lo que necesito es tener el más antiguo (del array de los shows más recientes) primero, y el show más reciente (en ese array de shows recientes) al final.

Actualmente obtengo (la fecha del show a través de un campo personalizado meta value):

3/11/12, 3/7/12, 3/4/12, 3/2/12, 2/30/12 etc.

Necesito: 2/30/12, 3/1/12, 3/4/12, 3/7/12, 3/11/12,

Intenté usar array_reverse de PHP así (añadido al código anterior):

$reversed_shows = array_reverse( $home_shows->posts );

Lo que me dio resultados muy extraños (mostró partes completamente diferentes del post, el orden del array estaba mal).

¿Alguna idea?

0
Todas las respuestas a la pregunta 4
1

Entendí lo que estaba haciendo mal. Un simple error de principiante.

Array_reverse estaba funcionando correctamente, pero luego no estaba reasignando el array invertido de vuelta a la consulta WP_Query $home_shows, por lo que no veía ningún cambio.

Aquí está la solución y mi código revisado.

<?php
                    $args = array(
                        'post_type' => 'show',
                        'posts_per_page' => 5,
                        'order' => 'DESC',
                    );
                    $home_shows = new WP_Query($args);
                    //invertir el orden de los posts, el más reciente al final
                    $array_rev = array_reverse($home_shows->posts);
                    //reasignar el array de posts invertido al objeto $home_shows
                    $home_shows->posts = $array_rev;
                ?>
                <?php $captions = array(); ?>
                <?php if ( $home_shows->have_posts() ) : ?>         
                    <?php while ( $home_shows->have_posts() ) : $home_shows->the_post(); ?>

Gracias por las respuestas, me alegra haber resuelto esto.

3 abr 2012 17:07:22
Comentarios

¡No olvides marcar tu respuesta como aceptada!

Burgi Burgi
21 nov 2016 13:39:16
3

¡Elimina todo el desorden de los campos personalizados y agrega un 'order' => 'ASC' al array de argumentos! ¡Y listo!

3 abr 2012 07:04:22
Comentarios

¿Qué lío con los campos personalizados? ¿El tipo de entrada personalizada? Eso es necesario, ya que el sitio tiene algunos tipos de entradas personalizadas para organizar las cosas. Intentaré explicar mejor lo que quiero decir a través de una edición de entrada

Squadrons Squadrons
3 abr 2012 07:18:22

Me disculpo por la mala elección de palabras. Los campos personalizados están disponibles también para los tipos de entradas por defecto. Solo porque sea un tipo de entrada personalizada, todo lo que necesitas es un 'post_type', que ya tienes. ¿Es cierto que quieres mostrar las últimas entradas primero?

Rutwick Gangurde Rutwick Gangurde
3 abr 2012 07:27:40

esto en realidad no resuelve el problema porque si solo estás consultando las 10 entradas más recientes, y usas orden ASC te dará las 10 entradas más antiguas.

Jacob Raccuia Jacob Raccuia
27 jul 2016 02:42:36
5
    <?php
    $args = array(
        'post_type' => 'show', // tipo de post personalizado 'show'
        'posts_per_page' => 5, // número de posts por página
        'order' => 'desc' // orden descendente
        );
    $home_shows = new WP_Query($args);
 //   var_dump($home_shows);

echo "<pre>";
print_r($home_shows->posts); // imprime los posts
echo "</pre>";



$array_rev = array_reverse($home_shows->posts); // revierte el orden del array de posts
echo "<pre>";
print_r($array_rev); // imprime el array revertido
echo "</pre>";
  ?>

Intenté lo anterior para mi tipo de post personalizado...

IDs de los posts resultantes: 240,239,238,237 para la reversión: 237,238,239,240

Debe haber algo más en el problema de tu lado......

3 abr 2012 09:28:58
Comentarios

¡Orderby está configurado a date por defecto!

Rutwick Gangurde Rutwick Gangurde
3 abr 2012 09:33:30

@RutwickGangurde he editado mi respuesta...

Rajeev Vyas Rajeev Vyas
3 abr 2012 09:52:35

¿Por qué invertir el array? Simplemente cambia el orden a ASC y obtendrás los últimos posts primero.

Rutwick Gangurde Rutwick Gangurde
3 abr 2012 09:58:31

@RutwickGangurde Creo que no entendiste su requerimiento... lo que él quiere es obtener los últimos 5 posts y luego mostrarlos en orden de manera que de esos cinco, el post con la fecha más pequeña aparezca primero...

Rajeev Vyas Rajeev Vyas
3 abr 2012 10:03:56

De acuerdo, no me di cuenta de eso antes. ¡Acabo de leer su pregunta editada!

Rutwick Gangurde Rutwick Gangurde
3 abr 2012 10:15:04
0

Si necesitas reordenar la consulta principal, te sugiero usar el siguiente hook:

add_action('the_posts', function($posts, $query) {
    
    if( $query->is_main_query() ) {
        
        usort($posts, function ($a, $b) {
            
            return strtotime($b->post_modified) - strtotime($a->post_modified);
        });
    }
    
    return $posts;
    
}, 10, 2);

En este ejemplo estoy reordenando las publicaciones por la fecha de post_modified pero puedes usar otra lógica.

31 ene 2024 04:58:43