is_search non funziona nella pagina dei risultati di ricerca

2 lug 2013, 16:46:39
Visualizzazioni: 17.8K
Voti: 4

Ho un sottomenu aggiuntivo con questo codice nella sidebar:

if(is_404() || is_search()) :
    echo 'dovrebbe essere vuoto';
else :
    if($post->post_parent == '68')
        $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
    else
        $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
    if ($children) { 
        ?><ul><?php echo $children; ?></ul><?php 
    }
endif;

Ho un problema con la prima riga. Funziona bene nella pagina 404 e nella pagina di ricerca quando si cerca qualcosa che non esiste, ma quando si cerca qualcosa che esiste, il sottomenu compare nella sidebar. Cosa c'è che non va in questo codice?

3
Commenti

Dove inserisci questo codice?

Krzysiek Dróżdż Krzysiek Dróżdż
2 lug 2013 16:50:23

Lo inserisco in sidebar.php

xarai xarai
2 lug 2013 17:33:57

Non hardcodare i valori dei post. Se proprio devi usare valori 'magici', fai riferimento agli slug dei post

Tom J Nowell Tom J Nowell
27 giu 2014 02:30:26
Tutte le risposte alla domanda 1
3

Se quello che vuoi è che il codice else venga visualizzato nelle pagine 404 e nelle pagine di ricerca ma solo quando la ricerca non restituisce risultati, la condizione di cui hai bisogno è...

if(is_404() || (is_search() && 0 === $wp_query->found_posts)) {
  // ...
} else {
  // ...
}

La differenza tra questo e il tuo codice è che ho aggiunto un controllo aggiuntivo per verificare se la query di ricerca ha dei risultati. Le parentesi attorno a is_search() && 0 === $wp_query->found_posts) fanno sì che l'operatore || agisca sull'intera clausola, proprio come le parentesi in matematica.

Se non vuoi che il codice else appaia in nessuna pagina di ricerca o 404, allora ti serve...

if(!is_404() || !is_search()) {
  // ...
} else {
  // ...
}

... ma questo è quello che hai già, quindi non sono sicuro di cosa stai cercando di ottenere.

2 lug 2013 17:31:23
Commenti

Ciao, quello che voglio è che il menu NON venga visualizzato nelle pagine 404, di ricerca e nei risultati di ricerca. Attualmente funziona bene con la pagina 404 e la pagina di ricerca senza risultati, ma quando ottengo dei risultati il menu ricompare...

xarai xarai
2 lug 2013 17:35:39

il mio problema è che if(!is_404() || !is_search()) { non funziona sempre. Funziona bene sulla pagina 404 e sulla ricerca quando non si trova nulla, ma non funziona sulla pagina di ricerca se ci sono risultati. Non capisco, sembra un bug.

xarai xarai
3 lug 2013 10:59:09

Ho trovato il problema, faceva parte di un altro if/else, escludere la 404 e la ricerca doveva essere fatto prima nel codice. Grazie per tutte le vostre risposte!

xarai xarai
3 lug 2013 11:46:38