Búsqueda con parámetros URL en WordPress - Solución a problema con país

15 oct 2012, 14:47:50
Vistas: 17K
Votos: 0

Posible duplicado:
Formulario de búsqueda personalizado con parámetros vacíos

Espero que esta sea una pregunta rápida, pero me he topado con un muro aquí.

Tengo múltiples términos de búsqueda: palabra clave, categoría, país y fecha. Lo he configurado para que el usuario no tenga que buscar usando todos estos filtros. Puedo omitir la categoría y/o la fecha y mostrará resultados más amplios.

Pero si omito el país, no muestra ningún resultado, mientras que hacer lo mismo con cualquier otro parámetro sigue mostrando resultados. El problema solo ocurre con el país.

/?s=a&cat=41&country=&monthnum=&year= no produce resultados, pero

/?s=a&cat=41&monthnum=&year= sí lo hace.

¿Por qué ocurre esto? ¿No deberían ser lo mismo?

Este es mi wp_query, simplemente obtiene posts. Tenía el foreach para limpiar este problema antes, pero actualmente si lo quito, la búsqueda funciona exactamente igual.

$args = array('post_type' => 'post')
// Este foreach realmente no necesita estar aquí ?
foreach(array('s', 'cat', 'country', 'monthnum', 'year') as $key) {
    if(isset($_GET[$key]) && trim($_GET[$key]) !== '') {
        $args[$key] = $_GET[$key];
    }
}
0
Todas las respuestas a la pregunta 1
3

La variable de consulta country no está definida, no es parte del conjunto estándar query_vars de WordPress, mientras que tanto monthnum como year sí lo están y es por eso que funcionan mientras que la primera no.

Necesitas agregar tu variable de consulta al conjunto, prueba con lo siguiente:

function new_query_var() {
    global $wp;
    $wp->add_query_var('country');
}
add_filter('init', 'new_query_var');

Además, parece que tu foreach está verificando la existencia de esta variable de consulta y como no está configurada (ej. isset), falla la verificación condicional.

15 oct 2012 16:02:08
Comentarios

Hola, gracias por la respuesta. Y sí, eso tiene sentido sobre el foreach. Añadí tu función en functions.php pero aún no hay cambios. No encuentra nada si el country= está presente. ¿O te he entendido mal?

zilj zilj
15 oct 2012 16:11:39

Reemplaza temporalmente el bloque if { } con var_dump($key); ¿qué ves?

Adam Adam
15 oct 2012 16:15:07

Obtuve esto string(1) "s" string(3) "cat" string(7) "country" string(8) "monthnum" string(4) "year" de estos parámetros de URL /?s=a&cat=41&country=&monthnum=10&year=2012

zilj zilj
15 oct 2012 16:18:40