Функция is_search не работает на странице результатов поиска

2 июл. 2013 г., 16:46:39
Просмотры: 17.8K
Голосов: 4

У меня есть дополнительное подменю в сайдбаре с таким кодом:

// Проверяем 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 странице и на странице поиска, если искать что-то несуществующее, но когда поиск находит результаты, подменю появляется в сайдбаре. В чем ошибка этого кода?

3
Комментарии

Куда вставить этот код?

Krzysiek Dróżdż Krzysiek Dróżdż
2 июл. 2013 г. 16:50:23

Я вставляю его в sidebar.php

xarai xarai
2 июл. 2013 г. 17:33:57

Не хардкодите значения постов. Если вам действительно нужно использовать 'магические' значения, обращайтесь к слагам постов

Tom J Nowell Tom J Nowell
27 июн. 2014 г. 02:30:26
Все ответы на вопрос 1
3

Если вам нужно, чтобы блок 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 {
  // ...
}

... но это у вас уже есть, поэтому я не совсем понимаю, чего вы пытаетесь достичь.

2 июл. 2013 г. 17:31:23
Комментарии

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

xarai xarai
2 июл. 2013 г. 17:35:39

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

xarai xarai
3 июл. 2013 г. 10:59:09

Нашёл проблему — это была часть другого if/else, исключение 404 и поиска нужно было прописать раньше в коде. Спасибо всем за ответы!

xarai xarai
3 июл. 2013 г. 11:46:38