Verwenden eines benutzerdefinierten Feldes zur Priorisierung von Suchergebnissen
Standardmäßig gibt SearchWP Suchergebnisse zurück, die nach berechnetem Relevanzgewicht absteigend sortiert sind.
Mit anderen Worten: Die relevantesten Ergebnisse steigen basierend auf den von Ihnen festgelegten Gewichten auf dem Einstellungsbildschirm der Engine für Ihre Suchmaschine(n) nach oben. Die direkte Kontrolle über die Attributrelevanz erleichtert die Kontrolle darüber, wie Suchergebnisse eingestuft werden.
Das Relevanzsystem von SearchWP kann nach Ihren Wünschen angepasst werden. Dieser Artikel beschreibt, wie Sie den numerischen Wert eines benutzerdefinierten Felds (postmeta) verwenden, um die Rangfolge von Suchergebnissen zu steuern.
Dies erstellt im Wesentlichen eine „Boje“, die die Relevanzgewichtsberechnung von SearchWP überschreibt und Ergebnisse basierend auf ihrem benutzerdefinierten Feldwert einstuft.
Mit dieser Anpassung werden Ergebnisse mit einem benutzerdefinierten Feldwert höher eingestuft als solche ohne einen benutzerdefinierten Feldwert. Ergebnisse mit dem benutzerdefinierten Feldwert werden zuerst nach diesem benutzerdefinierten Feldwert und dann nach der Relevanz von SearchWP sortiert. Ergebnisse ohne den benutzerdefinierten Feldwert werden nach der Relevanz von SearchWP sortiert.
Siehe auch: Relevanzgewicht für kürzlich veröffentlichte Einträge nach Datum hinzufügen
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 ); |

