Interogare personalizată de căutare
Vreau să creez o pagină de căutare personalizată care să facă următoarele:
Utilizatorul bifează mai multe elemente într-un formular pentru ce dorește să vadă în rezultatele căutării (practic alege dintr-o listă de etichete).
Sunt returnate rezultatele care se potrivesc cu toate etichetele alese (folosind AND, nu OR).
Un exemplu specific ar fi:
Returnează toate postările din categoria "Zonă" unde etichetele = "școală primară" ȘI "parc"
- Trebuie să dau formularului de căutare un nume specific?
- Pe pagina cu rezultatele căutării, cum să scriu interogarea personalizată astfel încât să preia toate postările din categoria Zonă și care au toate etichetele pe care utilizatorul le-a ales în formularul de căutare?
Iată un exemplu de cod pentru implementare:
// În template-ul paginii de căutare
$category = 'area';
$tags = $_POST['selected_tags']; // Array cu etichetele selectate
$args = array(
'category_name' => $category,
'tag_slug__and' => $tags, // Folosește AND între etichete
'posts_per_page' => -1
);
$query = new WP_Query($args);
if($query->have_posts()) :
while($query->have_posts()) : $query->the_post();
// Afișează rezultatele
the_title();
the_content();
endwhile;
wp_reset_postdata();
else :
echo 'Nu s-au găsit rezultate';
endif;

1) Puteți utiliza șabloanele search.php
și searchform.php
ca punct de plecare. Crearea unei Pagini de Căutare Codex
2) În ceea ce privește interogarea personalizată, puteți utiliza hook-ul pre_get_posts
pentru a verifica dacă vă aflați pe o pagină de căutare, apoi puteți obține valorile din $_GET
și puteți modifica interogarea în consecință. Referință Acțiune - pre_get_posts
Există o mulțime de tutoriale online și întrebări pe acest forum care vă pot ajuta. Unele sunt Simple, iar altele sunt mai Complexe. Va trebui să faceți o cercetare serioasă pentru a realiza acest lucru. Sper că vă ajută!

Pentru a crea o căutare personalizată, veți avea nevoie de aceste câmpuri de introducere în codul HTML. Puteți utiliza atributele name și value pentru a transmite datele către 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">
Apoi, în fișierul de scripturi, va trebui să construiți URL-ul.
// actualizează tipul de căutare
let type = $('input.type').val();
if(type === 0 || type == undefined){
type = "";
}
// actualizează categoria de căutare
let category = $('input.category').val();
if(category === 0 || category == undefined){
category = "";
}
// actualizează cuvântul cheie de căutare
keyword = '/?s=' + $(this).val() + '&post_type=' + type + '&category_name=' + category;
$('.search-keyword').attr('data-target','/cimuk' + keyword);
$('.search-keyword .label').text('Caută ' + '"' + $(this).val() + '"');
//apelează această funcție la trimitere sau apăsarea tastei Enter
function goKeyword(){
window.location.href = $('.search-keyword').data('target')
}
Apoi puteți adăuga acest filtru în fișierul functions.php. Acesta va prelua variabilele din URL și le va transmite către interogarea de căutare.
//Filtru de căutare pentru tipul de postare
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');
Rezultatele ar trebui să se încarce în fișierul search.php.
