Usando um Campo Personalizado para Priorizar Resultados de Pesquisa
Por padrão, o SearchWP retorna os resultados da pesquisa ordenados pelo peso de relevância calculado em ordem decrescente.
Em outras palavras, os resultados mais relevantes vêm à tona com base nos pesos que você definiu na tela de configurações do Motor para seus mecanismos de pesquisa. Ter controle direto sobre a relevância dos atributos facilita o controle de como os resultados da pesquisa se classificam.
O sistema de relevância do SearchWP pode ser modificado a seu gosto. Este artigo descreverá como usar o valor numérico de um Campo Personalizado (postmeta) para controlar a classificação dos resultados da pesquisa.
Isso, essencialmente, cria uma 'boia' que substitui o cálculo do peso de relevância do SearchWP e classifica os resultados com base no valor do Campo Personalizado.
Com essa personalização, os resultados com um valor de Campo Personalizado terão classificação acima daqueles sem um valor de Campo Personalizado. Os resultados com o valor do Campo Personalizado serão classificados primeiro por esse valor de Campo Personalizado e, em seguida, pelo valor de relevância do SearchWP. Os resultados sem o valor do Campo Personalizado serão classificados pelo valor de relevância do SearchWP.
Veja também: Adicionar Peso de Relevância a Entradas Publicadas Mais Recentemente por Data
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // Use a Custom Field as a buoy to supersede SearchWP's relevance weight sorting. | |
| // @link https://searchwp.com/documentation/knowledge-base/custom-field-prioritize-results/ | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| global $wpdb; | |
| $meta_key = 'my_buoy_meta_key'; | |
| // Add the buoy to these post types: | |
| $post_types = [ 'post', 'page', ]; | |
| foreach ( $post_types as $post_type ) { | |
| $mod = new \SearchWP\Mod(); | |
| $alias = \SearchWP::$index->get_alias(); | |
| $meta_alias = 'my_searchwp_sort_' . $post_type; | |
| $mod->column_as( $wpdb->prepare( "( | |
| SELECT meta_value | |
| FROM {$wpdb->postmeta} | |
| WHERE | |
| {$wpdb->postmeta}.post_id = {$alias}.id | |
| AND {$wpdb->postmeta}.meta_key = %s | |
| )", $meta_key ), | |
| $meta_alias ); | |
| $mod->order_by( "{$meta_alias} + 0", 'ASC', 2 ); | |
| $mods[] = $mod; | |
| } | |
| return $mods; | |
| }, 30, 2 ); |

