Erlaubt Besuchern die Suche nach mehreren Tags (spezifische IDs)

Ich versuche ein Suchformular / Filter zu erstellen, mit dem Besucher nach bestimmten Tags suchen können.

Ich habe diese Lösung implementiert:

<form method="get" action=""> 

Refine search to posts containing chosen tags:

<?php // generate list of tags $tags = get_tags(); foreach ($tags as $tag) { echo '\n"; } ?>

Und das ist in functions.php, damit es funktioniert:

 // advanced search functionality 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); 

Es zeigt jedoch ALLE Tags an. Wie bekomme ich bestimmte Tags nach ID, die Besucher auswählen können?

Solutions Collecting From Web of "Erlaubt Besuchern die Suche nach mehreren Tags (spezifische IDs)"

Lösung

1) Stellen Sie zuerst sicher, dass Sie WordPress 4.3 verwenden, das gerade veröffentlicht wurde, oder das wird nicht funktionieren.

2) Zweitens, lassen Sie den gesamten pre_get_posts , Sie werden ihn nicht brauchen. WordPress filtert das Sucharchiv automatisch anhand der Begriffe, die Sie in den Querystring aufgenommen haben (dies ist die 4.3-functionalität, die ich gerade erwähnt habe).

3) Als nächstes ersetzen Sie Ihren Aufruf von $tags = get_tags() mit dem folgenden …

 $tags = get_tags( array( 'include' => array( 1, 17, 22 ) ) ); 

Ändern Sie einfach das include => array() , um nur die gewünschten Tag / Term-IDs zu verwenden … alternativ können Sie stattdessen include ändern, exclude alles auszugeben exclude mit Ausnahme der angegebenen Tags.

4) Ändern Sie abschließend den Namen Ihrer Checkbox-Eingaben in tag[] .

Was wir gemacht haben

Die Voraussetzung ist dies: WordPress 4.3 filtert automatisch eine Archivseite (einschließlich Suchergebnissen) basierend auf einem Array von Querystring-Werten, die Sie übergeben. Dazu gehört beispielsweise “tag”.

Daher können wir der function get_tags() mitteilen, dass nur bestimmte von uns angegebene Tags get_tags() . Es benötigt ein assoziatives Array als Argument, und eines davon ist include , das ein anderes Array von nur den Tag-IDs verwendet, die es zurückgeben soll.

Um alles miteinander zu verbinden, müssen wir sicherstellen, dass das Formular den entsprechenden Abfrage-String erstellt, den WordPress erwartet. Etwas wie yoursite.com/blog/?s=your+search+terms&tag%5B%5D=foo&tag%5B%5D=bar

Um dies zu erreichen, stellen wir nur sicher, dass die Kontrollkästchen das Namens- tag[] – welches korrekt durch den Querystring formatiert wird und dann von WordPress abgefangen wird, welches es zum Filtern der Suchergebnisse verwendet.