Confronto tra modifiche all'indice e modifiche all'origine
I Mod di \SearchWP\Mod sono interazioni appositamente create con le query di ricerca di SearchWP.
Esistono due tipi principali di Mod:
- Basato sull'indice
- Applica la modifica all'intero indice
- Basato sulla sorgente
- Limita la modifica a una singola
Sorgente
Il modo principale per specificare quale tipo di Mod stai implementando è passare una Sorgente (o il nome della Sorgente) durante l'istanziazione di un Mod.
Nota: questo è un confronto tra le due istanziazioni, si noti che questi Mod non fanno ancora nulla.
| <?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 ); |
Il primo Mod è stato istanziato in modo da applicarsi all'intero indice quando la query viene eseguita. Al contrario, il secondo Mod si applicherà solo a una singola Sorgente.
Utilizzo di un Mod basato sull'indice
Un Mod basato sull'indice ha solo l'indice SearchWP come contesto. I Mod basati sull'indice dovrebbero essere limitati a quelli che necessitano solo di quel contesto immediato per svolgere il loro lavoro.
Sebbene sia certamente possibile eseguire JOIN aggiuntivi utilizzando un Mod basato sull'indice, farlo potrebbe comportare un aumento dei tempi di query che potrebbero non essere così evidenti con un Mod basato sulla sorgente.
Ad esempio: un Mod basato sull'indice applicabile sarebbe uno che aggiunge un peso 'bonus' a una particolare Sorgente restituita come risultato.
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; | |
| } ); |
Con questo Mod verrà assegnato un peso di rilevanza 'bonus' di 9999999 a tutti i Post. Un caso d'uso per un hook come questo potrebbe essere che si desidera che i Post vengano (quasi) garantiti per apparire sopra tutte le altre Sorgente senza forzare esplicitamente le Sorgente ad essere raggruppate.
Utilizzo di un Mod basato sulla sorgente
I Mod basati sulla sorgente facilitano le modifiche alle query che si applicano solo a una singola Sorgente. In questo caso esiste già un JOIN con la tabella del database che definisce la Sorgente, il che apre nuove possibilità di modifica.
Ad esempio: un Mod basato sulla sorgente può essere utilizzato per escludere determinati Post dai risultati di ricerca se è stata soddisfatta una qualche condizione:
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 ); |
Utilizzando questo Mod, i Post 97 e 188 sono esclusi dai risultati di ricerca solo quando $_GET['my_mod_trigger'] è stato definito.
Un altro esempio: un Mod basato sulla sorgente può essere utilizzato per escludere le Pagine con la parola caffè nel loro Titolo:
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 ); |
I Mod basati sulla sorgente sono modi potenti e programmatici per modificare il modo in cui SearchWP esegue le sue ricerche.

