¿Cómo consultar los últimos 5 posts y ordenarlos por título?

23 jun 2011, 00:16:24
Vistas: 1.12K
Votos: 0

Estoy intentando crear un menú que liste los últimos "n" posts, donde el número "n" será una configuración definida por el usuario almacenada como una opción.

n = 5; //Obtener los últimos 5 posts de la base de datos.

El script que estoy usando actualmente (abajo) obtiene todos los posts de la base de datos y luego solo muestra los últimos 5 de esa colección.

Esto funciona bien hasta que decidí ordenar la lista por título. Cuando lo hago, en lugar de ordenar solo los últimos 5 posts por título, está ordenando toda la colección de posts, sin importar cuándo fueron publicados.

¿Algún consejo sobre cómo puedo cambiar esta consulta para obtener solo los últimos "n" posts y luego ordenarlos por título entre esos 5?

(Nota: Estoy realmente interesado en la consulta get_posts() dentro del elemento UL. La primera consulta ($myquery) está solo para asegurarnos de que tenemos posts para mostrar antes de continuar.)

function recent_posts(){
    $catHidden=get_cat_ID('hidden');
    $myquery = new WP_Query();
    $myquery->query(array('cat' => "-$catHidden",'post__not_in' => get_option('sticky_posts')));
    $myrecentpostscount = $myquery->found_posts;
    if ($myrecentpostscount > 0){ ?>
    <ul>
    <?php 
    global $post;
    if(get_option('mySort') == 'asc'){
        $sortOrder='title';$sortDirection='asc';
    }
    $myrecentposts = get_posts
    (
        array
        (
            'post__not_in' => get_option('sticky_posts'), 
            'cat' => "-$catHidden",
            'numberposts' => get_option('cb2_latest_count'),
            'orderby' => $sortOrder,
            'order' => $sortDirection
        )
    );

    foreach($myrecentposts as  $idxrecent=>$post) { 
        //DIBUJAR EL MENÚ DE POSTS
    }
wp_reset_postdata();
}
1
Comentarios

Creo que el meollo del problema es que no parece haber una forma de llamar solo a las últimas 5 publicaciones y luego ordenar solo esas por título. Cuando aplico un orden a la consulta, en lugar de primero obtener las últimas 5 publicaciones y ordenar esas, ordena sobre toda la colección de publicaciones.

Scott B Scott B
23 jun 2011 18:27:32
Todas las respuestas a la pregunta 2
4

$yourquery = new WP_Query('posts_per_page=5&orderby=title'); haría eso.


Editar Respuesta añadida

<?php 
$posts = new WP_Query('posts_per_page=5');
foreach($posts->posts as $post){
    $sorted[$post->ID] =  $post->post_title;
}
asort($sorted, SORT_STRING);

foreach($sorted as $k=>$v){
        //tu bucle -- usa los ID's para cada llamada de elemento
    the_title($k);
    the_content($k);
}
?>
23 jun 2011 00:20:24
Comentarios

Gracias por la respuesta MF, pero todavía no lo tengo claro. Creo que lo que puede estar confundiendo es que mi preocupación principal es la segunda consulta, get_posts(). Todavía está obteniendo datos de toda la colección de posts, no de los últimos 5

Scott B Scott B
23 jun 2011 15:56:43

¿Por qué no los obtienes primero y luego los ordenas? Si tu problema es que obtienes los incorrectos, obtén primero los correctos y luego ordénalos.

Mild Fuzz Mild Fuzz
23 jun 2011 22:17:46

Sí, eso es lo que me gustaría hacer. Sin embargo, una vez que tienes los últimos 5 posts, están en orden de publicación (los más recientes primero). Quiero tomar esos 5 posts y ordenarlos alfabéticamente antes de pasarlos al bucle for. ¿Cómo le indicas entonces al bucle for en qué orden debe mostrarlos?

Scott B Scott B
24 jun 2011 00:05:37

esto debería funcionar. (ver edición.)

Mild Fuzz Mild Fuzz
24 jun 2011 00:32:27
0

utiliza el siguiente código y modifícalo a tu gusto:

// obtener los últimos cinco posts
$latestposts = get_posts(); // por defecto obtiene los últimos 5
// solo obtener los IDs de los posts
$keys = array_keys($latestposts);
// obtener esos 5 posts pero ordenados por título
$fivepostsorderedbytitle = get_posts(array('orderby' => 'post_title', 'post__in' => $keys));
24 jun 2011 00:57:38