Keyword-Suche in mehreren Kategorien

Ich habe jetzt einen Tag oder so damit verbracht und wende mich an die Gemeinschaft um Hilfe.

Erstens versuche ich etwas wie diesen Post zu erreichen:

WordPress Multiple Kategoriesuche

In meiner Designvorlage habe ich ein benutzerdefiniertes Suchformular:

<form id="searchform" method="get" action=""> 
0); $categories = get_categories($args); echo '
'; foreach ($categories as $category) { $thecatid = $category->cat_ID; echo '
slug, '">
'; $childcats=get_categories(array('parent' => $thecatid)); foreach($childcats as $c) { echo '
cat_ID, '" type="checkbox" name="category_name" value="', $c->slug, '">
'; } echo '
'; } ?>

Also, sagen wir zum Beispiel, dass ich nach “Schlüsselwort” suche, und ich wähle zwei Kontrollkästchen aus, “Kategorie A” und “Kategorie B”. Ich habe zwei Beiträge, eins in jeder Kategorie. Jeder dieser beiden Beiträge enthält dieses Keyword. Nach dem Klicken auf den Submit-Button wird folgende URL generiert:

mydomain.com/?s=keyword&category_name=category-a&category_name=category-b

Was dies gerade macht, zeigt mir ein Ergebnis – also einen Eintrag aus Kategorie B mit diesem Schlüsselwort darin.

Was ich eigentlich suche, ist dieses Ergebnis:

mydomain.com/?s=keyword&category_name=category-a,category-b

Wobei ich alle Beiträge in allen Kategorien mit diesem Schlüsselwort bekomme.

Ich habe hoch und niedrig geschaut, und während ich Ergebnisse gefunden habe, bei denen andere versuchten, eine ähnliche Sache zu erreichen, funktionierte keine ihrer Lösungen für mich.

Dies ist alles Teil einer Lernkurve für mich. Ich habe dieses Plugin gefunden, das so aussieht, als würde es tun, was ich will, aber wie Sie alle wahrscheinlich in dieser Situation waren, wobei “Ich wünschte, ich könnte das selbst machen, damit ich besser verstehe, wie die Mechanismen hinter WordPress funktionieren”, hoffe ich Ich werde die Frage zu schätzen wissen.

Vielen Dank im Voraus, wenn etwas nicht klar ist oder ich wichtige Informationen hinterlassen habe, lass es mich wissen.

Solutions Collecting From Web of "Keyword-Suche in mehreren Kategorien"

Beginnen wir mit der Definition eines HTML-Suchformulars:

 

Refine search to posts containing chosen tags:

< ?php // generate list of categories $tags = get_categories(); foreach ($tags as $tag) { echo '

Fügen Sie dies zu functions.php hinzu

 function advanced_search_query($query) { if($query->is_search()) { // tag search if (isset($_GET['taglist']) && is_array($_GET['taglist'])) { $query->set('tag_slug__and', $_GET['taglist']); } return $query; } } add_action('pre_get_posts', 'advanced_search_query', 1000); 

Hier ist, was bei mir funktioniert hat.

Preethis Antwort wäre fast da, aber es wurden keine Daten festgelegt. Ich musste einen Weg finden, auf die Daten im Array zuzugreifen, und ich benutzte implode, um es zu tun.

Hier ist mein abschließender Code, der es mir ermöglichte, ein Suchformular zu erstellen, das Kategorien durchläuft und anzeigt, dem Benutzer erlaubt, eine Stichwortsuche über eine beliebige Anzahl von Kategorien durchzuführen und Ergebnisse anzuzeigen, wenn das Schlüsselwort in einer der ausgewählten Kategorien existiert:

Ich habe eine searchform.php- Datei in meiner Theme-Datei erstellt und folgenden HTML- Code eingefügt :

 
< ?php $args = array('parent' => 0); $categories = get_categories($args); echo '
'; foreach ($categories as $category) { $thecatid = $category->cat_ID; echo '
'; $childcats=get_categories(array('parent' => $thecatid)); foreach($childcats as $c) { echo '
'; } echo '
'; } ?>

und dann hat meine functions.php folgenden Code:

 < ?php function advanced_search_query($query) { if($query->is_search()) { $get_the_category_name = $_GET['category_name']; if (isset($get_the_category_name) && is_array($get_the_category_name)) { $catnames = implode(",",$get_the_category_name); $query->set('category_name', $catnames); return $query; } } } add_action('pre_get_posts', 'advanced_search_query'); ?> 

wenn Sie tun:

 var_dump($get_the_category_name); 

Du wirst kriegen:

 array(2) { [0]=> string(22) "category-a" [1]=> string(25) "category-b" } 

Run implode () darauf

 string(48) "human-element-analysis,latent-defects-check-list" 

Kleben Sie diese Zeichenfolge in eine Variable, setzen Sie sie in der Abfrage als Kategorie_Name, gewinnen.

Nochmals vielen Dank, Preethi, dass Sie mich in die richtige Richtung gebracht haben, und ich hoffe, das obige hilft jedem, der das gleiche tun möchte!