Come interrogare gli ultimi 5 post e ordinarli per titolo?

23 giu 2011, 00:16:24
Visualizzazioni: 1.12K
Voti: 0

Sto cercando di creare un menu che elenchi gli ultimi "n" post, dove "n" sarà un'impostazione definita dall'utente memorizzata come opzione.

n = 5; //Recupera gli ultimi 5 post dal database.

Lo script che sto attualmente usando (qui sotto) recupera tutti i post dal database e poi mostra solo gli ultimi 5 di quella collezione.

Questo funziona bene finché non decido di ordinare la lista per titolo. Quando lo faccio, invece di ordinare solo gli ultimi 5 post per titolo, ordina l'intera collezione di post, senza considerare quando sono stati pubblicati.

Qualche suggerimento su come posso modificare questa query per recuperare solo gli ultimi "n" post, poi ordinarli per titolo tra questi 5 soltanto.

(Nota: Sono particolarmente interessato alla query get_posts() dentro l'elemento UL. La prima query ($myquery) è qui solo per assicurarci che ci siano post da visualizzare prima di procedere.)

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) { 
        //DISEgna IL MENU DEI POST
    }
wp_reset_postdata();
}
1
Commenti

Penso che il nodo del problema sia che non sembra esserci un modo per richiamare solo gli ultimi 5 post, per poi ordinarli solo quelli per titolo. Quando applico un ordinamento alla query, invece di prima estrarre gli ultimi 5 post e ordinarli, ordina l'intera collezione di post.

Scott B Scott B
23 giu 2011 18:27:32
Tutte le risposte alla domanda 2
4

$yourquery = new WP_Query('posts_per_page=5&orderby=title'); farebbe questo.


Modifica Risposta Aggiunta

<?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){
        //il tuo ciclo -- usa gli ID per ogni chiamata
    the_title($k);
    the_content($k);
}
?>
23 giu 2011 00:20:24
Commenti

Grazie per la risposta MF, ma non ci sono ancora del tutto. Penso che ciò che potrebbe confondere sia che mi preoccupa soprattutto la seconda query, get_posts(). Sta ancora estraendo dall'intera collezione di articoli, non dagli ultimi 5

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

perché non li ottieni prima e poi li ordini? Se il tuo problema è ottenere quelli sbagliati, prendi prima quelli giusti, poi mettili in ordine.

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

Sì, è quello che vorrei fare. Tuttavia, una volta che hai gli ultimi 5 articoli, sono in ordine di pubblicazione (i più recenti per primi). Voglio poi prendere quei 5 articoli e ordinarli alfabeticamente prima di passarli al ciclo for. Come fai poi a dire al ciclo for in che ordine disporli?

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

questo dovrebbe funzionare. (vedi modifica.)

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

utilizza il seguente codice e modificarlo a tuo piacimento:

// recupera gli ultimi cinque articoli
$latestposts = get_posts(); // di default vengono presi gli ultimi 5
// recupera solo gli ID degli articoli
$keys = array_keys($latestposts);
// recupera quei 5 articoli ma ordinati per titolo
$fivepostsorderedbytitle = get_posts(array('orderby' => 'post_title', 'post__in' => $keys));
24 giu 2011 00:57:38