Regrouper les résultats de recherche par source (type de publication) et définir leur ordre
Par défaut, SearchWP renverra des résultats de toutes les sources d'un moteur, classés par poids de pertinence dans l'ordre décroissant.
Dans certains cas, il est utile de regrouper les résultats par source et, au sein de chaque groupe de sources, de trier les résultats par pertinence.
Nous pouvons utiliser un \SearchWP\Mod pour faire exactement cela.
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 ); |
Remarque : Pour que cette personnalisation soit pleinement efficace, vous devrez personnaliser le tableau $source_order avec les noms des sources (dans l'ordre souhaité) et il doit inclure TOUTES les sources du moteur.
L'extrait ci-dessus fait référence à une fonction utilitaire pour récupérer le nom de source interne de SearchWP pour les types de publication, la source Utilisateurs est nommée user, et tous les autres noms de source doivent également être inclus.
Si vous souhaitez appliquer ce tri de manière conditionnelle, vous pouvez examiner la variable $query pour déterminer si vous souhaitez sortir tôt ou appliquer ce \SearchWP\Mod en le retournant.
Voir aussi : Faire en sorte qu'un type de publication apparaisse avant tout autre

