Cum filtrez ordinea rezultatelor căutării?
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!

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.

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?
