Come posso filtrare l'ordine dei risultati di ricerca?

9 feb 2012, 05:23:24
Visualizzazioni: 20K
Voti: 5

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!

0
Tutte le risposte alla domanda 1
3
12

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.

9 feb 2012 11:56:18
Commenti

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?

PVA PVA
10 feb 2012 03:26:28

Inseriscilo nel file functions.php

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

Come posso ordinare per custom_field come se avessi 'discount_price' che contiene il prezzo in testo per i record dei libri

Ashish v Ashish v
23 ott 2018 15:43:09