総売上で商品を並べ替える
SearchWPは、検索語句との一致度に基づいて検索結果をランク付けします。このランキングは、異なるコンテンツフィールドに対して設定した重み設定をエンジン設定で使用します。しかし、WooCommerceストアでは、コンテンツの一致度だけでなく、販売回数に基づいて商品を表示したい場合があります。
総販売数で商品を並び替えることで、最も人気のある商品を最初に表示し、収益を増やすことができます。この戦略は、顧客がすでに気に入っている商品を検索結果の上位に表示します。
総販売数で結果を並び替え
販売数で並び替えられた商品結果を表示したい場合は、以下のコードを使用できます。この方法はコンテンツの一致度を無視し、検索語句との一致度に関係なく、最も売れている商品を最初に表示します。
|
<?php |
|
|
|
// Order product search results by total sales |
|
add_filter( 'searchwp\query\mods', function( $mods, $query ) { |
|
global $wpdb; |
|
|
|
$mod = new \SearchWP\Mod(); |
|
$alias = \SearchWP::$index->get_alias(); |
|
$meta_alias = 'my_searchwp_sort_products'; |
|
$meta_key = 'total_sales'; |
|
|
|
$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", 'DESC', 5 ); |
|
|
|
$mods[] = $mod; |
|
|
|
return $mods; |
|
}, 30, 2 ); |
このコードは、販売数に基づいて検索結果を降順(多い順から少ない順)に並べ替えます。実装はSearchWPの関連性アルゴリズムに完全に優先されるため、コンテンツが検索クエリにどれだけ一致するかに関係なく、常に販売量で商品が並び替えられます。
注意:2つ以上の商品が同じ販売数を持つ場合、それらの順序は関連性に基づく二次的な並び替えによって決定されます。
関連性を維持しながら人気商品をブーストする
SearchWPの通常のランキングを維持しつつ、よく売れる商品に追加ポイントを与えたい場合は、別の方法を使用できます。この方法はコンテンツの一致度を維持したまま、人気商品を結果の上位に押し上げます。
|
<?php |
|
|
|
// Boost relevance for WooCommerce products with high total sales |
|
add_filter( 'searchwp\query\mods', function( $mods, $query ) { |
|
global $wpdb; |
|
|
|
// Adjustable variables |
|
$min_total_sales = 100; // Minimum sales required to qualify |
|
$bonus_weight = 99999; // Base relevance weight |
|
$sales_multiplier = 100; // Extra relevance per sale |
|
|
|
$search_term = trim( $query->get_keywords() ); |
|
if ( empty( $search_term ) ) { |
|
return $mods; |
|
} |
|
|
|
$mod = new \SearchWP\Mod(); |
|
$mod->set_local_table( $wpdb->posts ); |
|
$mod->on( 'ID', [ 'column' => 'id' ] ); |
|
|
|
$mod->relevance( function( $runtime ) use ( $wpdb, $min_total_sales, $bonus_weight, $sales_multiplier ) { |
|
$alias = $runtime->get_local_table_alias(); |
|
|
|
return " |
|
CASE |
|
WHEN {$alias}.post_type = 'product' |
|
AND ( |
|
SELECT CAST(pm.meta_value AS UNSIGNED) |
|
FROM {$wpdb->postmeta} pm |
|
WHERE pm.post_id = {$alias}.ID |
|
AND pm.meta_key = '_total_sales' |
|
LIMIT 1 |
|
) >= {$min_total_sales} |
|
THEN |
|
{$bonus_weight} + |
|
( |
|
SELECT CAST(pm.meta_value AS UNSIGNED) |
|
FROM {$wpdb->postmeta} pm |
|
WHERE pm.post_id = {$alias}.ID |
|
AND pm.meta_key = '_total_sales' |
|
LIMIT 1 |
|
) * {$sales_multiplier} |
|
ELSE 0 |
|
END |
|
"; |
|
}); |
|
|
|
$mods[] = $mod; |
|
|
|
return $mods; |
|
}, 20, 2 ); |
このコードは、特定の販売数を達成した商品にボーナスポイントを追加します。ボーナスには基本スコアと総販売数に基づく追加ポイントが含まれます。これにより、人気商品はより高いランキングを獲得しつつ、SearchWPは商品の検索語句との一致度も引き続き考慮します。
設定の調整
コードには、ブーストの仕組みを制御するために変更できる3つの設定が含まれています。
最低総販売数 ($min_total_sales): デフォルトは100です。これは、商品がブーストを受けるために必要な販売数です。ストアの通常の販売数に基づいてこの数値を変更してください。
ボーナスウェイト ($bonus_weight): デフォルトは99999です。これは、条件を満たした商品に追加される基本スコアです。数値を大きくすると、人気商品がより有利になります。
販売数乗数 ($sales_multiplier): デフォルトは100です。この数値に商品の総販売数を掛けて、追加ポイントを計算します。数値を大きくすると、中程度に人気のある商品と非常に人気のある商品の差が大きくなります。
コードの追加
カスタムフックは、WPCodeのようなコードスニペットプラグインを使用するか、このSearchWPドキュメントで説明されているSearchWPカスタマイズプラグインを作成することで追加できます。
コードを追加して有効化すると、SearchWPはすぐに新しい並べ替え戦略の使用を開始します。ブーストメソッドを使用すると、十分な売上があった商品は結果の上部に表示され、その後に他の一致する商品が表示されます。
SearchWPメトリクスで結果を追跡する
売上ベースの並べ替え戦略を追加した後、SearchWPメトリクス拡張機能を使用して、時間の経過に伴うパフォーマンスを確認してください。メトリクスは、ベストセラー商品が他の結果と比較してどれだけのクリックを獲得しているかを示します。これにより、新しい並べ替えがうまく機能しているかどうかを理解するのに役立ちます。
メトリクスでクリックデータを調べることで、顧客が探しているものをより速く見つけられているか、またはあまり売れていない良い商品をスキップしているかを確認できます。この情報を使用して、戦略を調整したり、コードの設定を変更したり、さまざまなアプローチを試したりして、ストアに最適なものを見つけてください。