Agrupar resultados de pesquisa por origem (tipo de postagem) e definir sua ordem
Por padrão, o SearchWP retornará resultados de todas as Origens dentro de um Mecanismo, classificados pelo peso de relevância em ordem decrescente.
Em alguns casos, é útil agrupar resultados por Origem e, dentro de cada grupo de Origem, classificar os resultados por relevância.
Podemos utilizar um \SearchWP\Mod para fazer exatamente isso.
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 ); |
Observação: Para que essa personalização seja totalmente eficaz, você precisará personalizar a matriz $source_order com os nomes das Origens (na ordem desejada) e ela deve incluir TODAS as Origens do Mecanismo.
O trecho acima referencia uma função utilitária para recuperar o nome interno da Origem do SearchWP para tipos de postagem, a origem Usuários é nomeada user e quaisquer outros nomes de Origem devem ser incluídos também.
Se você quiser aplicar essa classificação condicionalmente, pode examinar a variável $query para determinar se deseja sair cedo ou aplicar este \SearchWP\Mod retornando-o.
Veja também: Fazer um tipo de postagem aparecer acima de qualquer outro

