Функция is_search не работает на странице результатов поиска
У меня есть дополнительное подменю в сайдбаре с таким кодом:
// Проверяем 404 страницу или страницу поиска
if(is_404() || is_search()) :
echo 'должно быть пусто';
else :
// Если текущая страница является дочерней для страницы с ID 68
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;
У меня проблема с первой строкой. Код корректно работает на 404 странице и на странице поиска, если искать что-то несуществующее, но когда поиск находит результаты, подменю появляется в сайдбаре. В чем ошибка этого кода?

Если вам нужно, чтобы блок else
отображался на страницах 404 и страницах поиска, но только тогда, когда поиск не дал результатов, то вам понадобится следующее условие...
if(is_404() || (is_search() && 0 === $wp_query->found_posts)) {
// ...
} else {
// ...
}
Разница между этим кодом и вашим заключается в том, что я добавил дополнительную проверку на наличие результатов поиска. Скобки вокруг is_search() && 0 === $wp_query->found_posts)
заставляют оператор ||
работать со всем выражением, аналогично скобкам в математике.
Если вы не хотите, чтобы блок else
отображался на любых страницах поиска или 404, то вам нужно...
if(!is_404() || !is_search()) {
// ...
} else {
// ...
}
... но это у вас уже есть, поэтому я не совсем понимаю, чего вы пытаетесь достичь.

Привет, мне нужно, чтобы меню НЕ отображалось на страницах 404, поиска и результатов поиска. Сейчас оно правильно скрывается на 404 и странице поиска без результатов, но когда есть результаты — меню снова появляется...

Моя проблема в том, что if(!is_404() || !is_search()) {
работает не всегда. На страницах 404 и поиска без результатов всё ок, но на странице с результатами поиска условие не срабатывает. Не понимаю, похоже на баг.
