Invertir el orden de las publicaciones DESPUÉS de realizar la consulta
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?
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.

¿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

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?

<?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......

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

@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...

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.
