Ricerca parametri URL nella query

15 ott 2012, 14:47:50
Visualizzazioni: 17K
Voti: 0

Possibile duplicato:
Modulo di ricerca personalizzato con parametri vuoti

Spero sia una domanda veloce, ma mi sono bloccato qui.

Ho diversi termini di ricerca: keyword, categoria, paese e data. L'ho configurato in modo che l'utente non debba utilizzare tutti questi filtri. Posso omettere la categoria e/o la data e mostra comunque risultati più generici.

Ma se ometto il paese non mostra alcun risultato, mentre fare lo stesso con qualsiasi altro parametro mostra comunque risultati. Il problema riguarda solo il parametro country.

/?s=a&cat=41&country=&monthnum=&year= non produce risultati ma

/?s=a&cat=41&monthnum=&year= sì.

Perché? Non dovrebbero essere la stessa cosa?

Questa è la mia wp_query, che semplicemente recupera i post. Avevo il foreach per risolvere questo problema prima, ma attualmente se lo rimuovo la ricerca funziona esattamente allo stesso modo.


$args = array('post_type' => 'post')
// Questo foreach in realtà non ha bisogno di essere qui ?
foreach(array('s', 'cat', 'country', 'monthnum', 'year') as $key) {
    if(isset($_GET[$key]) && trim($_GET[$key]) !== '') {
        $args[$key] = $_GET[$key];
    }
}
0
Tutte le risposte alla domanda 1
3

La tua variabile di query country non è definita, non fa parte del set standard query_vars di WordPress, mentre sia monthnum che year lo sono ed è per questo che funzionano mentre la prima no.

Quindi devi aggiungere la tua variabile di query al mix, prova con quanto segue:

function new_query_var() {
    global $wp;
    $wp->add_query_var('country');
}

add_filter('init', 'new_query_var');

Inoltre, sembra che il tuo foreach stia verificando l'esistenza di questa variabile di query e quindi, poiché non è impostata (es. isset), non supera il controllo condizionale.

15 ott 2012 16:02:08
Commenti

Ciao, grazie per la risposta. E sì, ha senso riguardo al foreach. Ho aggiunto la tua funzione in functions.php ma ancora nessun cambiamento. Non trova nulla se è presente il parametro country=. O ho frainteso quello che intendevi?

zilj zilj
15 ott 2012 16:11:39

Sostituisci temporaneamente il blocco if { } con var_dump($key);, cosa vedi?

Adam Adam
15 ott 2012 16:15:07

Ho ottenuto questo string(1) "s" string(3) "cat" string(7) "country" string(8) "monthnum" string(4) "year" da questi parametri nell'URL /?s=a&cat=41&country=&monthnum=10&year=2012

zilj zilj
15 ott 2012 16:18:40