web-dev-qa-db-fra.com

Is_search ne fonctionne pas sur la page de résultats de recherche

J'ai un sous-menu supplémentaire avec ce code dans la barre latérale:

if(is_404() || is_search()) :
    echo 'should be empty';
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;

J'ai un problème avec la première ligne. Cela fonctionne bien sur la page 404 et sur la page de recherche si vous recherchez quelque chose qui n'existe pas, mais lorsque vous recherchez quelque chose qui existe, le sous-menu apparaît dans la barre latérale. Quel est le problème avec ce code?

1
xarai

Si ce que vous voulez, c'est que la variable else apparaisse sur 404 pages et sur les pages de recherche mais uniquement lorsque la recherche ne renvoie aucun résultat, la condition dont vous avez besoin est ...

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

La différence entre cela et votre code est que j'ai ajouté une vérification supplémentaire pour voir si la requête a des résultats. Les crochets autour de is_search() && 0 === $wp_query->found_posts) font que le || fonctionne par rapport à la clause entière, tout comme les crochets en mathématiques.

Si vous ne voulez pas que la else soit effectuée sur une recherche ou sur 404 pages, il vous faut ...

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

... mais c'est ce que vous avez et je ne suis pas sûr de ce que vous essayez d'atteindre.

1
s_ha_dum