Consulta de Búsqueda Personalizada

8 abr 2014, 18:18:22
Vistas: 36.3K
Votos: 6

Me gustaría configurar una página de búsqueda personalizada que haga lo siguiente:

El usuario marca varios elementos en un formulario que le gustaría ver en su búsqueda (básicamente eligiendo de una lista de etiquetas).

Los resultados devueltos coinciden con todas las etiquetas que eligió (usando AND en lugar de OR).

Un ejemplo específico sería:

Devolver todas las entradas en la categoría "Área" donde las etiquetas = "escuela primaria" Y "parque"

  1. ¿Necesito nombrar mi formulario de búsqueda de alguna manera en particular?
  2. En la página de resultados de búsqueda, ¿cómo codifico la consulta personalizada para que obtenga todas las entradas dentro de la categoría Área y que tengan todas las etiquetas que el usuario eligió en el formulario de búsqueda?
6
Comentarios

Mucha confusión en lo que he leído. He visto que debería usar algo como query_posts('cat=32&tag=hs1+hs1&showposts=5'); y también he visto que debería usar algo como `<?php

$the_query = new WP_Query( 'cat=Neighborhood&tag=elementary school+park' );

// El Loop while ( $the_query->have_posts() ) : $the_query->the_post();
the_title(); the_content(); endwhile;

wp_reset_postdata();

?>`

Peanut Peanut
8 abr 2014 18:47:22

y también he visto que debería usar algo como $query = array ( 'paged' => 1, 'posts_per_page' => '5', 'offset' => 0, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'DESC', 'post_type' => array ( 'post' => 'post', ), 'cat' => '35', 'tag__and' => array ( 0 => 36, 1 => 39, ), ); ... básicamente estoy extremadamente confundido.

Peanut Peanut
8 abr 2014 18:47:38

@Peanut Dos notas: Si tienes información adicional, por favor haz [ediciones] en lugar de comentarios. No todos leen los comentarios y estos se limpian de vez en cuando. Segundo, por favor usa formato (backticks) para código en comentarios. Tienes un enlace de "ayuda" justo al lado del formulario de comentarios aquí. Gracias.

kaiser kaiser
8 abr 2014 18:58:15

Usa WP_Query y su parámetro s, no olvides llamar a wp_reset_postdata después de terminar con esta consulta :-) REF: https://codex.wordpress.org/Class_Reference/WP_Query#Search_Parameter

jave.web jave.web
20 ene 2017 14:04:11

Por favor revisa la misma pregunta en stackoverflow https://stackoverflow.com/questions/9523881/how-do-i-modify-search-query-in-wordpress/57786703#57786703

Amit Kumar PRO Amit Kumar PRO
4 sept 2019 13:42:32

Por favor verifica la misma pregunta en stackoverflow https://stackoverflow.com/questions/9523881/how-do-i-modify-search-query-in-wordpress/57786703#57786703

Amit Kumar PRO Amit Kumar PRO
4 sept 2019 13:43:56
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 2
0
11

1) Puedes usar las plantillas search.php y searchform.php como punto de partida. Crear una página de búsqueda Codex

2) En cuanto a la consulta personalizada, puedes usar el hook pre_get_posts para verificar si estás en una página de búsqueda, luego obtienes tus valores de $_GET y modificas la consulta según corresponda. Referencia de Acción - pre_get_posts

Hay muchísimos tutoriales en línea y preguntas en este foro que pueden ayudarte. Algunos son Simples y otros más Complejos. Tendrás que investigar realmente para lograrlo. ¡Espero que te ayude!

8 abr 2014 18:24:48
0

Para realizar una búsqueda personalizada, necesitarás estos inputs en tu HTML. Puedes usar los atributos name y value para pasarlos a tu URL.

<input type="hidden" class="category" name="category_name" value="recording">
<input type="hidden" class="type" name="post_type" value="post">
<input type="text" class="search-bar" id="global-search"><button class="search-submit" type="submit" id="search-submit">

Luego, en tu archivo de scripts, deberás construir tu URL.

// actualizar tipo de búsqueda
let type = $('input.type').val();
if(type === 0 || type == undefined){
  type = "";
}
// actualizar categoría de búsqueda
let category = $('input.category').val();
if(category === 0 || category == undefined){
  category = "";
}
// actualizar palabra clave de búsqueda
keyword = '/?s=' + $(this).val() + '&post_type=' + type + '&category_name=' + category;
$('.search-keyword').attr('data-target','/cimuk' + keyword);
$('.search-keyword .label').text('Buscar ' + '"' + $(this).val() + '"');

//llamar a esta función al enviar o presionar enter
function goKeyword(){
    window.location.href = $('.search-keyword').data('target')
}

Luego puedes agregar este filtro a tu functions.php. Esto tomará las variables de la URL y las pasará a la consulta de búsqueda.

//Filtrar tipo de publicación en búsqueda
function mySearchFilter($query) {
    $post_type = $_GET['post_type'];
    $category = $_GET['category_name'];
    if (!$post_type) {
        $post_type = 'any';
    }
    if (!$category){
        $category = null;
    }
    if ($query->is_search) {
        $query->set('post_type', $post_type);
        $query->set('category_name', $category);
    };
    return $query;
};


add_filter('pre_get_posts','mySearchFilter');

Los resultados deberían cargarse en tu search.php

14 nov 2019 23:25:36