\SearchWP\Mod
\SearchWP\Mod オブジェクトは、\SearchWP\Query を変更するために使用されます。
各 \SearchWP\Mod は単一の変更を実装し、任意の数の \SearchWP\Mod を同時に使用できます。
\SearchWP\Mod の一般的なユースケースには以下のようなものがあります。
- カスタムパラメータに基づいて結果の関連性重み計算を変更する。
- カスタム基準に基づいて返される結果(または返されない結果)を制御する。
- カスタム基準を実装するために、カスタムデータベーステーブルと
JOINする。
より具体的には、投稿、固定ページ、カスタム投稿タイプに関連して、\SearchWP\Mod は以下に使用できます。
- 特定のカテゴリの結果に限定する。
- 特定のタグを持つ結果を除外する。
- より最近の公開日により多くの重みを与える。
- 特定のカスタムフィールドを持つ投稿のメタ値に基づいて重みブーストを実装する。
- 特定のタームを持つ投稿にボーナスウェイトを追加する。
\SearchWP\Mod は、カスタム SQL を記述することなく \SearchWP\Query と対話することを可能にしますが、\SearchWP\Mod を組み立てる際に適用可能な場合はカスタム SQL を記述したり、\SearchWP\Query フックを使用したりすることもできます。
関連項目: インデックスとソースの Mod の比較
基本的な使い方
\SearchWP\Mod の使用法はユースケースによって異なりますが、実装は次の 2 つの方法のいずれかで行われます。
\SearchWP\Modの配列を'mods'引数を使用して\SearchWP\Queryに渡すことができます。searchwp\query\modsフックを使用する。
例として、この \SearchWP\Mod は投稿 145 と 211 を検索結果から除外します。
| <?php | |
| // @link https://searchwp.com/documentation/classes/searchwp-mod/ | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| $mod = new \SearchWP\Mod( $source ); | |
| $mod->set_where( [ [ | |
| 'column' => 'id', | |
| 'value' => [ 145, 211 ], | |
| 'compare' => 'NOT IN', | |
| 'type' => 'NUMERIC', | |
| ] ] ); |
\SearchWP\Mod を記述したら、次のステップは上記の 2 つのステップのいずれかに従って実装することです。
独自の \SearchWP\Query を構築している場合は、この \SearchWP\Mod を 'mods' 引数で渡すことができます。
| <?php | |
| // @link https://searchwp.com/documentation/classes/searchwp-mod/ | |
| // Retrieve Source name to use with Mod. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| // Build Mod to exclude Post ID 145 and Post ID 211. | |
| $mod = new \SearchWP\Mod( $source ); | |
| $mod->set_where( [ [ | |
| 'column' => 'id', | |
| 'value' => [ 145, 211 ], | |
| 'compare' => 'NOT IN', | |
| 'type' => 'NUMERIC', | |
| ] ] ); | |
| // Execute search for 'coffee' using Mod. | |
| $search = new \SearchWP\Query( 'coffee', [ | |
| 'mods' => [ $mod ], | |
| ] ); | |
| $results = $search->results; // Array of results. |
または、searchwp\query\mods フックを使用して \SearchWP\Mod をエンキューすることもできます。
注意: この方法を使用すると、追加のコードを記述してそれを防がない限り、この \SearchWP\Mod はすべての検索に適用されます。
| <?php | |
| // @link https://searchwp.com/documentation/classes/searchwp-mod/ | |
| add_filter( 'searchwp\query\mods', function( $mods, $query ) { | |
| // Retrieve Source name to use with Mod. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); | |
| // Build Mod to exclude Post ID 145 and Post ID 211. | |
| $mod = new \SearchWP\Mod( $source ); | |
| $mod->set_where( [ [ | |
| 'column' => 'id', | |
| 'value' => [ 145, 211 ], | |
| 'compare' => 'NOT IN', | |
| 'type' => 'NUMERIC', | |
| ] ] ); | |
| $mods[] = $mod; | |
| return $mods; | |
| }, 20, 2 ); | |
| // Execute search for 'coffee' using Mod enqueued above. | |
| $search = new \SearchWP\Query( 'coffee' ); | |
| $results = $search->results; // Array of results. |
\SearchWP\Mod をエンキューするために searchwp\query\mods フックを使用すると、ネイティブ検索中に適用できます。
引数
\SearchWP\Mod には、オプションの単一の引数 $source があります。
$source が定義されている場合、一部の動作(例: WHERE 句)は、その特定の $source のロジックに自動的に制限されます。
$source が指定されていない場合、その動作はインデックスに適用されます。
詳細については、インデックスとソースのモッドの比較を参照してください。
$source は、\SearchWP\Source の name または \SearchWP\Source 自体のいずれかです。
注意: WP_Post Source を扱う場合、このユーティリティメソッドを使用して、投稿タイプ名を渡すことで Source name を取得できます。
| <?php | |
| // @link https://searchwp.com/documentation/classes/searchwp-mod/ | |
| // Retrieve the Source name for a Post Type: | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'post' ); // Posts. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'page' ); // Pages. | |
| $source = \SearchWP\Utils::get_post_type_source_name( 'movie' ); // Custom Post Type. |
$source が指定されていない場合、インスタンス化中に内部で適切なデフォルトが処理されます。
source(string)\SearchWP\Sourceのname(デフォルト:null)
メソッド
relevance( $sql )- 関連性計算句を追加します。例
weight( $sql )- 重み計算句を追加します。注意:
relevance()とは異なり、重み計算は検索一致数に掛けられます。 column_as( $sql, $column_name )- 列変更句を追加します。
get_columns()- 登録済み列のゲッター。
get_weights()- 登録済み重み変更のゲッター。
get_join_sql()- 生成された
JOINSQL のゲッター。 raw_join_sql( $sql )- 生の
JOINSQL 句を追加します。 get_raw_join_sql()- 生の
JOINSQL 句のゲッター。 raw_where_sql( $sql )- 生の
WHERESQL 句を追加します。 get_raw_where_sql()- 生の
WHERESQL 句のゲッター。 get_source()- 適用可能な
\SearchWP\Sourceのゲッター。 set_where( $where )WHERE句のセッター。get_where()WHERE句のゲッター。set_local_table( string $table )- ローカルテーブル名のセッター。
get_local_table()- ローカルテーブル名のゲッター。
set_local_table_alias( string $table )- ローカルテーブルエイリアスのセッター。
get_local_table_alias()- ローカルテーブルエイリアスのゲッター。
set_foreign_alias( string $alias )- 外部テーブルエイリアスのセッター。
get_foreign_alias()- 外部テーブルエイリアスのゲッター。
on( string $local, array $foreign )ON句を追加します。get_on()ON句のゲッター。order_by( $column, $direction, $priority )ORDER BY句を追加します。例get_order_by()ORDER BY句のゲッター。set_values( array $values )- 実行時にエスケープされるSQLプレースホルダー値のセッター。
get_values()- SQLプレースホルダー値のゲッター。

