カスタムフィールドを使用して検索結果の優先順位を付ける
デフォルトでは、SearchWPは計算された関連性ウェイトの降順で検索結果を返します。
つまり、検索エンジンのエンジンの設定画面で設定したウェイトに基づいて、最も関連性の高い結果が上位に表示されます。属性の関連性を直接制御できるため、検索結果のランキングを簡単に制御できます。
SearchWPの関連性システムは、お好みに合わせて変更できます。この記事では、カスタムフィールド(postmeta)の数値を使用して検索結果のランキングを制御する方法を概説します。
これにより、SearchWPの関連性ウェイト計算をオーバーライドする「ブイ」が作成され、カスタムフィールドの値に基づいて結果がランク付けされます。
このカスタマイズにより、カスタムフィールド値を持つ結果は、カスタムフィールド値を持たない結果よりも上位にランク付けされます。カスタムフィールド値を持つ結果は、まずそのカスタムフィールド値でソートされ、次にSearchWPの関連性値でソートされます。カスタムフィールド値を持たない結果は、SearchWPの関連性値でソートされます。
関連項目:公開日によって最近公開されたエントリーの関連性ウェイトを追加する
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 ); |

