Cum să cauți categorii și/sau etichete?
Am o funcție de căutare pe blogul meu. Dacă introduc o valoare, de exemplu 'fructe' în caseta de căutare și nu găsește niciun rezultat în articole, dar există o categorie cu acest nume pe blog, atunci doresc să fie afișate articolele care aparțin acelei categorii.
Este posibil să modific funcționalitatea de căutare astfel încât să includă și căutarea în toate categoriile și eventual etichetele din blog?
Mulțumesc mult.
// Deasupra loop-ului în șablonul rezultatelor căutării:
if ( is_search() ) // Suntem pe o pagină de rezultate căutare?
{
global $wp_query, $query_string;
// acum modificăm/filtrăm interogarea (rezultatul)
query_posts( $query_string . 'cat=1&tag=apples+apples' );
}

Cred că codul de mai sus va prelua inputul de la utilizator și îl va căuta în categoria de mere. Ceea ce vreau să spun este că doresc ca căutarea să acopere toate numele de categorii și etichete din blog. De exemplu, dacă scriu în căsuța de căutare "fructe", atunci deși poate nu am articole care conțin textul 'fructe', totuși doresc ca articolele care aparțin acelei categorii să apară în rezultatele căutării. La fel, dacă scriu "legume" (altă categorie) în căsuța de căutare, doresc să apară articole din categoria de legume. Îmi cer scuze că nu am fost clar în întrebare, o voi edita acum.

De ce nu simplu faci un meniu drop-down pentru toate categoriile și/sau etichetele tale și le legi acolo? Sau ai prea multe categorii/etichete? Apropo: Ai căutat deja în repository-ul de pluginuri pentru unul care poate face asta? Și: Am editat titlul întrebării tale pentru mai multă claritate.

Iată o funcție care va căuta orice categorii (sau alte taxonomii) care se potrivesc cu șirul dat și apoi returnează toate articolele incluse în acea categorie.
function searchTermPosts(String $query) {
// Mai întâi obține categoriile / taxonomiile care au un 'nume asemănător' cu interogarea
$terms = get_terms([ "name__like" => $query ]);
// Acum convertește într-o interogare de taxonomie pe care o putem folosi în WP_Query
$tax_query = array_map(function ($term) {
return [
"taxonomy" => $term->taxonomy,
"terms" => $term->term_taxonomy_id
];
}, $terms);
// Adaugă o clauză "SAU" pentru a găsi articole în toate categoriile
$tax_query["relation"] = "OR";
// Acum efectuează interogarea
$results = new \WP_Query([
"tax_query" => $tax_query
]);
// Returnează atât rezultatele cât și termenii, precum și numele termenilor
return [
"results" => $results,
"terms" => $terms,
"term_names" => array_map(fn ($t) => $t->name, $terms)
];
}
Și apoi folosește-o astfel:
$query = searchTermPosts("fructe");
$count = $query['results']->found_posts;
$cats = implode(",", $query['term_names']);
echo "S-au găsit $count rezultate în aceste categorii: $cats";
echo "<ul>";
while ($query['results']->have_posts()) {
$query['results']->the_post();
echo '<li><a href="' . get_the_permalink() . '">';
the_title();
echo '</a></li>';
}
echo "</ul>";
