is_search no funciona en la página de resultados de búsqueda

2 jul 2013, 16:46:39
Vistas: 17.8K
Votos: 4

Tengo un submenú adicional con este código en la barra lateral:

if(is_404() || is_search()) :
    echo 'debería estar vacío';
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;

Tengo un problema con la primera línea. Funciona correctamente en la página 404 y en la página de búsqueda cuando buscas algo que no existe, pero cuando buscas algo que sí existe, el submenú aparece en la barra lateral. ¿Qué está mal en este código?

3
Comentarios

¿Dónde colocas este código?

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

Lo coloco en sidebar.php

xarai xarai
2 jul 2013 17:33:57

No codifiques valores de publicación directamente. Si realmente debes usar valores 'mágicos', refiérete a los slugs de publicación en su lugar

Tom J Nowell Tom J Nowell
27 jun 2014 02:30:26
Todas las respuestas a la pregunta 1
3

Si lo que deseas es que el else aparezca en las páginas 404 y en las páginas de búsqueda pero solo cuando la búsqueda no devuelve resultados, el condicional que necesitas es ...

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

La diferencia entre esto y tu código es que he añadido una verificación adicional para ver si la consulta de búsqueda tiene algún resultado. Los paréntesis alrededor de is_search() && 0 === $wp_query->found_posts) hacen que el || opere contra toda la cláusula, al igual que los paréntesis en matemáticas, en realidad.

Si no deseas que el else aparezca en ninguna página de búsqueda o 404, entonces necesitas...

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

... pero eso es lo que ya tienes, así que no estoy seguro de lo que estás intentando lograr.

2 jul 2013 17:31:23
Comentarios

Hola, lo que quiero es que el menú NO aparezca en páginas 404, búsqueda y resultados de búsqueda. Ahora funciona bien con 404 y página de búsqueda sin resultados, pero cuando obtengo resultados el menú vuelve a aparecer...

xarai xarai
2 jul 2013 17:35:39

mi problema es que if(!is_404() || !is_search()) { no funciona siempre. Funciona bien en 404 y búsqueda cuando no hay resultados, pero no funciona en la página de búsqueda si hay resultados. No lo entiendo, parece un bug.

xarai xarai
3 jul 2013 10:59:09

Encontré el problema, era parte de otro if/else, excluir el 404 y la búsqueda tenía que estar antes en el código. ¡Gracias por todas sus respuestas!

xarai xarai
3 jul 2013 11:46:38