Comparando Mods de Índice e Fonte
\SearchWP\Mods são interações criadas especificamente para consultas de pesquisa do SearchWP.
Existem dois tipos principais de Mods:
- Baseado em Índice
- Aplicar modificação ao índice como um todo
- Baseado em
Fonte - Limitar a modificação a uma única
Fonte
A principal forma de especificar o tipo de Mod que você está implementando é passar uma Fonte (ou o nome da Fonte) ao instanciar um Mod.
Observação: esta é uma comparação das duas instanciações, note que esses Mods ainda não fazem nada.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/comparing-index-source-mods/ | |
| // Instantiate an index Mod that applies to the entire index. | |
| $mod = new \SearchWP\Mod(); | |
| // Instantiate a Source Mod that applies only to Posts. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| $mod = new \SearchWP\Mod( $source ); |
O primeiro Mod foi instanciado de forma que se aplicará ao Índice como um todo quando a consulta for executada. Em comparação, o segundo Mod se aplicará apenas a uma única Fonte.
Usando um Mod baseado em Índice
Um Mod baseado em Índice tem apenas o Índice do SearchWP como seu contexto. Mods baseados em Índice devem ser limitados àqueles que precisam apenas desse contexto imediato para realizar seu trabalho.
Embora seja certamente possível realizar JOINs adicionais usando um Mod baseado em Índice, fazer isso pode resultar em tempos de consulta aumentados que podem não ser tão prevalentes com um Mod baseado em Fonte.
Por exemplo: um Mod aplicável baseado em Índice seria um que adiciona um peso 'bônus' a uma Fonte específica que é retornada como resultado.
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/comparing-index-source-mods/ | |
| // Add relevance weight to a single SearchWP Source (Posts). | |
| add_filter( 'searchwp\query\mods', function( $mods ) { | |
| global $wpdb; | |
| $mod = new \SearchWP\Mod(); | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| $mod->weight( $wpdb->prepare( "IF(s.source = %s, 9999999, 0)", $source ) ); | |
| $mods[] = $mod; | |
| return $mods; | |
| } ); |
Com este Mod, um peso de relevância 'bônus' de 9999999 será concedido a todos os Posts. Um caso de uso para um hook como este pode ser que você queira que os Posts sejam (quase) garantidos de aparecer acima de todas as outras Fontes sem explicitamente forçar as Fontes a serem agrupadas.
Usando um Mod baseado em Fonte
Mods baseados em Fonte facilitam modificações de consulta que se aplicam apenas a uma única Fonte. Neste caso, já existe um JOIN com a tabela do banco de dados que define a Fonte, o que abre novas possibilidades de modificação.
Por exemplo: um Mod baseado em Fonte pode ser usado para excluir Posts específicos de resultados de pesquisa se alguma condição for atendida:
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/comparing-index-source-mods/ | |
| add_filter( 'searchwp\query\mods', function( $mods ) { | |
| if ( ! isset( $_GET['my_mod_trigger'] ) ) { | |
| return $mods; | |
| } | |
| // Exclude Posts 97 and 188 from search results. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| $mod = new \SearchWP\Mod( $source ); | |
| $mod->set_where( [ [ | |
| 'column' => 'ID', | |
| 'value' => ['97', '188'], | |
| 'compare' => 'NOT IN', | |
| 'type' => 'NUMERIC' | |
| ] ] ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 30, 2 ); |
Usando este Mod, os Posts 97 e 188 são excluídos dos resultados de pesquisa apenas quando $_GET['my_mod_trigger'] foi definido.
Outro exemplo: um Mod baseado em Fonte pode ser usado para excluir Páginas com a palavra café em seu Título:
All hooks should be added to your custom SearchWP Customizations Plugin.
| <?php | |
| // @link https://searchwp.com/documentation/knowledge-base/comparing-index-source-mods/ | |
| add_filter( 'searchwp\query\mods', function( $mods ) { | |
| // Exclude Pages with 'coffee' in the Title. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'page' ); | |
| $mod = new \SearchWP\Mod( $source ); | |
| $mod->set_where( [ [ | |
| 'column' => 'post_title', | |
| 'value' => 'coffee', | |
| 'compare' => 'LIKE', | |
| ] ] ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 30, 2 ); |
Mods baseados em Fonte são maneiras poderosas e programáticas de modificar a forma como o SearchWP realiza suas pesquisas.

