Suchergebnisse nach Quelle (Beitragstyp) gruppieren und deren Reihenfolge festlegen
Standardmäßig gibt SearchWP Ergebnisse aus allen Quellen innerhalb einer Engine zurück, geordnet nach Relevanzgewicht in absteigender Reihenfolge.
In einigen Fällen ist es nützlich, Ergebnisse nach Quelle zu gruppieren und innerhalb jeder Quellengruppe die Ergebnisse nach Relevanz zu sortieren.
Wir können ein \SearchWP\Mod verwenden, um genau das zu tun.
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Group SearchWP results by Source, sort by relevance within each Source group. | |
| // @link https://searchwp.com/documentation/knowledge-base/group-results-by-source-post-type/ | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| $mod = new \SearchWP\Mod(); | |
| $mod->order_by( function( $mod ) { | |
| // Search results should be grouped by Sources in this order. | |
| // NOTE: _ALL_ Engine Sources must be included here! | |
| $source_order = [ | |
| 'user', | |
| \SearchWP\Utils::get_post_type_source_name( 'post' ), | |
| \SearchWP\Utils::get_post_type_source_name( 'page' ), | |
| ]; | |
| return "FIELD({$mod->get_foreign_alias()}.source, " | |
| . implode( ',', array_filter( array_map( function( $source_name ) { | |
| global $wpdb; | |
| return $wpdb->prepare( '%s', $source_name ); | |
| }, $source_order ) ) ) . ')'; | |
| }, '', 1 ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 10, 2 ); |
Hinweis: Damit diese Anpassung vollständig wirksam wird, müssen Sie das Array $source_order mit den Quellennamen (in der gewünschten Reihenfolge) anpassen und es muss ALLE Engine-Quellen enthalten.
Der obige Ausschnitt verweist auf eine Hilfsfunktion, um den internen Quellennamen von SearchWP für Beitragstypen abzurufen. Die Quellen für Benutzer heißen user, und alle anderen Quellennamen müssen ebenfalls enthalten sein.
Wenn Sie diese Sortierung bedingt anwenden möchten, können Sie die Variable $query untersuchen, um festzustellen, ob Sie frühzeitig aussteigen oder dieses \SearchWP\Mod durch Rückgabe anwenden möchten.
Siehe auch: Einen Beitragstyp über allen anderen anzeigen lassen

