Cum să interoghezi ultimele 5 articole și să le sortezi după titlu?

23 iun. 2011, 00:16:24
Vizualizări: 1.12K
Voturi: 0

Încerc să creez un meniu care afișează ultimele "n" articole, unde numărul "n" va fi o setare definită de utilizator stocată ca opțiune.

n = 5; //Extrage ultimele 5 articole din baza de date.

Scriptul pe care îl folosesc în prezent (mai jos) extrage toate articolele din baza de date și apoi afișează doar ultimele 5 din acea colecție.

Acest lucru funcționează bine până când am decis să sortez lista după titlu. Când fac asta, în loc să sorteze ultimele 5 articole după titlu, sortează întreaga colecție de articole, fără a ține cont de data publicării.

Ce sugestii aveți pentru a modifica această interogare pentru a extrage doar ultimele "n" articole, apoi să le sortez doar pe acestea după titlu?

(Notă: Sunt interesat în special de interogarea get_posts() din interiorul elementului UL. Prima interogare ($myquery) este aici doar pentru a ne asigura că avem articole de afișat înainte de a continua.)

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) { 
        //DESENEAZĂ MENIUL CU ARTICOLE
    }
wp_reset_postdata();
}
1
Comentarii

Cred că esența problemei este că nu pare să existe o modalitate de a apela doar cele mai recente 5 postări, apoi să le sortezi doar pe acelea după titlu. Când aplic o sortare în interogare, în loc să extragă mai întâi cele mai recente 5 postări și să le sorteze pe acelea, se sortează întreaga colecție de postări.

Scott B Scott B
23 iun. 2011 18:27:32
Toate răspunsurile la întrebare 2
4

$yourquery = new WP_Query('posts_per_page=5&orderby=title'); ar face asta.


Editat Răspuns adăugat

<?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){
        //bucla ta -- folosește ID-uri pentru fiecare apel
    the_title($k);
    the_content($k);
}
?>
23 iun. 2011 00:20:24
Comentarii

Mulțumesc pentru răspuns, MF, dar nu sunt încă pe deplin mulțumit. Cred că ceea ce poate fi confuz este faptul că sunt foarte preocupat de a doua interogare, get_posts(). Încă preia din întreaga colecție de articole, nu din ultimele 5

Scott B Scott B
23 iun. 2011 15:56:43

de ce nu le obții mai întâi, apoi le ordonezi? Dacă problema ta este că obții cele greșite, obține mai întâi cele corecte, apoi pune-le în ordine.

Mild Fuzz Mild Fuzz
23 iun. 2011 22:17:46

Da, asta aș dori să fac. Totuși, odată ce ai cele mai recente 5 articole, ele sunt în ordinea postării (cele mai recente primele). Apoi vreau să iau acele 5 articole și să le ordonez alfabetic înainte de a le scrie în bucla for. Cum poți specifica buclai for în ce ordine să le aranjeze?

Scott B Scott B
24 iun. 2011 00:05:37

acest lucru ar trebui să funcționeze. (vezi editarea.)

Mild Fuzz Mild Fuzz
24 iun. 2011 00:32:27
0

folosește următorul cod și modifică-l după preferințe:

// preia ultimele cinci articole
$latestposts = get_posts(); // implicit se preiau ultimele 5
// preia doar ID-urile articolelor
$keys = array_keys($latestposts);
// preia aceleași 5 articole, dar ordonate după titlu
$fivepostsorderedbytitle = get_posts(array('orderby' => 'post_title', 'post__in' => $keys));
24 iun. 2011 00:57:38