Căutare după cuvânt, categorie, etichetă, autor
Pentru a crea o pagină de căutare cu funcționalități de căutare după:
1) cuvânt
2) etichetă
3) categorie
4) autor
Poți utiliza următoarele metode:
1. Creează un formular de căutare personalizat în template-ul tău:
<form role="search" method="get" action="<?php echo home_url('/'); ?>">
<!-- Căutare după cuvânt -->
<input type="text" name="s" placeholder="Caută după cuvânt">
<!-- Căutare după categorie -->
<?php wp_dropdown_categories(array(
'show_option_all' => 'Toate categoriile',
'name' => 'cat'
)); ?>
<!-- Căutare după etichetă -->
<select name="tag">
<option value="">Toate etichetele</option>
<?php
$tags = get_tags();
foreach($tags as $tag) {
echo '<option value="' . $tag->slug . '">' . $tag->name . '</option>';
}
?>
</select>
<!-- Căutare după autor -->
<select name="author">
<option value="">Toți autorii</option>
<?php
$authors = get_users(['who' => 'authors']);
foreach($authors as $author) {
echo '<option value="' . $author->ID . '">' . $author->display_name . '</option>';
}
?>
</select>
<input type="submit" value="Caută">
</form>
2. Apoi, în fișierul search.php sau într-un template personalizat, poți procesa rezultatele:
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 10
);
// Adaugă parametrii de căutare
if (!empty($_GET['s'])) {
$args['s'] = sanitize_text_field($_GET['s']);
}
if (!empty($_GET['cat'])) {
$args['cat'] = intval($_GET['cat']);
}
if (!empty($_GET['tag'])) {
$args['tag'] = sanitize_text_field($_GET['tag']);
}
if (!empty($_GET['author'])) {
$args['author'] = intval($_GET['author']);
}
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// Afișează rezultatele
get_template_part('template-parts/content', 'search');
endwhile;
wp_reset_postdata();
else :
echo 'Nu s-au găsit rezultate.';
endif;
?>
Vei dori să adaugi niște butoane radio în formularul tău de căutare. Apoi adaugă un filtru la căutarea ta:
function filter_search( $query ) {
if( $query->is_search ) {
if ( isset($_GET['tag']) )
// modifică aici interogarea de căutare.
}
return $query;
}
add_filter( 'pre_get_posts' , 'filter_search' );
Inspirat de http://wordpress.org/support/topic/how-to-add-search-filter-by-custom-values#post-1463329

Dacă preferi să lași un plugin WordPress să facă treaba pentru tine, verifică Search Everything, în depozitul de plugin-uri WordPress.
Îmbunătățește funcționalitatea implicită de căutare WordPress în trei pași simpli folosind Search Everything.
Căutare WordPress mai bună în trei pași
Activează Configurează opțiunii Caută (poate sunt doar doi pași)
Opțiunile includ evidențierea căutării, căutarea în pagini, extrase, atașamente, ciorne, comentarii și câmpuri personalizate (metadata).
Ce face:
Search Everything îmbunătățește capacitatea căutării implicite WordPress, opțiuni incluse:
- Evidențierea rezultatelor căutării
- Căutare în toate paginile
- Căutare în toate etichetele
- Căutare în taxonomii personalizate (nou)
- Căutare în toate categoriile
- Căutare doar în paginile neprotejate cu parolă
- Căutare în toate comentariile
- Căutare doar în comentariile aprobate
- Căutare în toate ciornele
- Căutare în toate extrasele
- Căutare în toate atașamentele (tipul de postare)
- Căutare în toate câmpurile personalizate (metadata)
- Excludere postări din căutare
- Excludere categorii din căutare
[Plugin WordPress]: Search Everything

idee grozavă, am încercat pentru căutarea în tipurile de postări personalizate și funcționează, mulțumesc!

Acest plugin este util, dar face exact opusul a ceea ce am nevoie: ia ca intrare un cuvânt și caută în etichete, categorii, titluri etc. pentru acel cuvânt. Ceea ce am nevoie eu sunt criterii precum: categoriaZ & eticheta "XYY" & titlul să conțină "House". Deci cred că acest plugin nu este utilizabil aici. Corect?
