Utilizzo di un campo personalizzato per dare priorità ai risultati di ricerca
Per impostazione predefinita, SearchWP restituisce i risultati di ricerca ordinati in base al peso di rilevanza calcolato in ordine decrescente.
In altre parole, i risultati più pertinenti salgono in cima in base ai pesi che hai impostato nella schermata delle impostazioni del motore per i tuoi motori di ricerca. Avere il controllo sulla rilevanza degli attributi facilita direttamente il controllo su come classificare i risultati di ricerca.
Il sistema di rilevanza di SearchWP può essere modificato a tuo piacimento. Questo articolo illustrerà come utilizzare il valore numerico di un campo personalizzato (postmeta) per controllare la classifica dei risultati di ricerca.
Ciò crea essenzialmente un 'galleggiante' che sovrascrive il calcolo del peso di rilevanza di SearchWP e classifica i risultati in base al loro valore di campo personalizzato.
Con questa personalizzazione, i risultati con un valore di campo personalizzato si classificheranno sopra quelli senza un valore di campo personalizzato. I risultati con il valore del campo personalizzato verranno ordinati prima per quel valore del campo personalizzato e poi per il valore di rilevanza di SearchWP. I risultati senza il valore del campo personalizzato verranno ordinati in base al valore di rilevanza di SearchWP.
Vedi anche: Aggiungi peso di rilevanza alle voci pubblicate più di recente per 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 ); |

