Căutare parametri URL query

15 oct. 2012, 14:47:50
Vizualizări: 17K
Voturi: 0

Posibil Duplicat:
Formular de căutare personalizat cu parametri goi

Sper că aceasta este o problemă rapidă, dar am dat de un zid aici.

Am mai mulți termeni de căutare: cuvânt cheie, categorie, țară și dată. Am configurat astfel încât utilizatorul să nu fie nevoit să completeze toate aceste filtre. Pot omite categoria și/sau data și vor apărea rezultate mai generale.

Dar dacă omit țara, nu se afișează niciun rezultat, în timp ce omiterea oricărui alt parametru încă afișează rezultate. Problema apare doar cu parametrul country.

/?s=a&cat=41&country=&monthnum=&year= nu produce rezultate, dar

/?s=a&cat=41&monthnum=&year= funcționează.

De ce se întâmplă asta? Teoretic, acestea ar trebui să fie același lucru?

Acesta este wp_query-ul meu, care pur și simplu preia postări. Am avut foreach-ul pentru a rezolva această problemă anterior, dar în prezent dacă îl elimin, căutarea funcționează la fel.


$args = array('post_type' => 'post')
// Acest foreach nu trebuie neapărat să fie aici?
foreach(array('s', 'cat', 'country', 'monthnum', 'year') as $key) {
    if(isset($_GET[$key]) && trim($_GET[$key]) !== '') {
        $args[$key] = $_GET[$key];
    }
}
0
Toate răspunsurile la întrebare 1
3

Variabila ta de interogare country nu este definită, nu face parte din setul standard query_vars stabilit de WordPress, în timp ce atât monthnum cât și year fac parte din acest set și de aceea funcționează, în timp ce prima nu.

Deci trebuie să adaugi variabila ta de interogare în mix, încearcă următoarele:

function new_query_var() {

    global $wp;
    $wp->add_query_var('country');

}

add_filter('init', 'new_query_var');

De asemenea, se pare că foreach-ul tău verifică existența acestei variabile de interogare și, deoarece aceasta nu este setată (de exemplu prin isset), condiția nu este îndeplinită.

15 oct. 2012 16:02:08
Comentarii

Salut, mulțumesc pentru răspuns. Și da, are sens ce spui despre foreach. Am adăugat funcția ta în functions.php dar tot nu s-a schimbat nimic. Refuză să găsească orice dacă parametrul country= este prezent. Sau te-am înțeles greșit?

zilj zilj
15 oct. 2012 16:11:39

Înlocuiește temporar blocul if { } cu var_dump($key); ce vezi?

Adam Adam
15 oct. 2012 16:15:07

Am primit asta string(1) "s" string(3) "cat" string(7) "country" string(8) "monthnum" string(4) "year" din acești parametri URL /?s=a&cat=41&country=&monthnum=10&year=2012

zilj zilj
15 oct. 2012 16:18:40