Cum filtrez ordinea rezultatelor căutării?

9 feb. 2012, 05:23:24
Vizualizări: 20K
Voturi: 5

Există vreo modalitate prin care aș putea face ca rezultatele căutării să afișeze mai întâi Paginile și apoi articolele?

Site-ul meu este unul de business cu un blog, spre deosebire de situația în care blogul ar fi principalul element. Paginile statice conțin toate informațiile despre "ce facem noi" și ideal ar fi ca acestea să apară primele atunci când cineva caută diverse servicii. Articolele de blog sunt mai lejere ca ton, dar fiind mai recente, apar primele.

Bucla de căutare este din tema Kubrick:

<?php if (have_posts()) : ?>
<div class="center">
<div class="padding-bottom">
<h1><?php _e('Rezultatele Căutării', 'kubrick'); ?></h1>
</div>
</div>

<?php while (have_posts()) : the_post(); ?>

<div <?php post_class(); ?>>
<h3 id="post-<?php the_ID(); ?>"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('Link Permanent către %s', 'kubrick'), the_title_attribute('echo=0')); ?>"><?php the_title(); ?></a></h3><?php the_excerpt(); ?>
</div>

<?php endwhile; ?>

<?php else : ?>

<h2 class="center"><?php _e('Fără rezultate. Încercați din nou?', 'kubrick'); ?></h2>
<?php get_search_form(); ?>

<?php endif; ?>

Aș putea pune ceva acolo pentru a specifica că orice rezultat dintr-o "pagină" să fie listat înaintea rezultatelor dintr-un "articol"? Sau WordPress nu face diferența între pagini și articole la acel nivel? Având în vedere că paginile statice sunt "statice", aș putea folosi eventual ID-urile?

Mulțumesc!

0
Toate răspunsurile la întrebare 1
3
12

Puteți utiliza filtrul posts_orderby pentru a modifica ordinea postărilor returnate. Acesta va rula pentru fiecare interogare (atât în front-end cât și în back-end), așa că asigurați-vă că doriți să modificați ordinea folosind is_admin, is_search etc.

În exemplul de mai jos, rezultatele căutării sunt ordonate după tipul postării în ordine crescătoare (de exemplu pagină apoi postare), iar apoi după data postării în ordine descrescătoare.

add_filter('posts_orderby','my_sort_custom',10,2);
function my_sort_custom( $orderby, $query ){
    global $wpdb;

    if(!is_admin() && is_search()) 
        $orderby =  $wpdb->prefix."posts.post_type ASC, {$wpdb->prefix}posts.post_date DESC";

    return  $orderby;
}

Notă importantă: dacă aveți un tip de postare 'advert' (anunț), iar acesta apare în rezultatele căutării - acesta va apărea înaintea paginilor.

Cu toate acestea, aceasta este o metodă relativ simplă și eficientă pentru a obține ceea ce doriți.

9 feb. 2012 11:56:18
Comentarii

Salut Stephen: asta sună exact cum aș vrea eu - Mulțumesc! Dar unde trebuie plasat acest filtru? În bucla de căutare pe care am postat-o? (Dacă da, după ce?) În functions.php?

PVA PVA
10 feb. 2012 03:26:28

Plasați-l în functions.php

Stephen Harris Stephen Harris
10 feb. 2012 10:21:19

Cum pot ordona după un custom_field, de exemplu dacă am 'discount_price' care conține prețul în text pentru înregistrările de cărți

Ashish v Ashish v
23 oct. 2018 15:43:09