Come posso filtrare l'ordine dei risultati di ricerca?
C'è un modo per far apparire nei risultati di ricerca prima le Pagine e poi i Post?
Il mio sito è un sito aziendale con un blog, diversamente dai siti dove il blog è l'elemento principale. Le pagine statiche contengono tutte le informazioni su "cosa facciamo" e idealmente dovrebbero apparire per prime quando qualcuno cerca i vari servizi. I post del blog sono più leggeri nel tono, ma essendo più recenti appaiono per primi.
Il loop di ricerca è dal tema Kubrick:
<?php if (have_posts()) : ?>
<div class="center">
<div class="padding-bottom">
<h1><?php _e('I Nostri Risultati di Ricerca', '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 Permanente a %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('Nessun risultato. Vuoi riprovare?', 'kubrick'); ?></h2>
<?php get_search_form(); ?>
<?php endif; ?>
Potrei inserire qualcosa per specificare che qualsiasi risultato da una "pagina" venga elencato prima dei risultati da un "post"? Oppure WordPress non fa effettivamente distinzione tra pagine e post a quel livello? Dato che le pagine statiche sono "statiche" potrei forse usare gli ID?
Grazie!

Puoi utilizzare il filtro posts_orderby
per modificare l'ordine dei post restituiti. Questo verrà eseguito per ogni query (sia nel front-end che nel back-end), quindi assicurati di voler modificare l'ordine utilizzando is_admin
, is_search
ecc.
Nell'esempio seguente, i risultati di ricerca sono ordinati per tipo di post in ordine crescente (ad esempio prima le pagine, poi gli articoli), e quindi ordinati per data di pubblicazione in ordine decrescente.
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;
}
Nota: se hai un tipo di post 'advert' (pubblicità) e questo appare nei risultati di ricerca, apparirà prima delle pagine.
A parte questa nota, questo è un modo relativamente semplice per ottenere ciò che desideri.

Ciao Stephen: sembra proprio quello che cerco - Grazie! Ma dove devo inserire questo filtro? Nel loop di ricerca che ho postato? (Se sì, dopo cosa?) Nel functions.php?
