HUSKYで大規模WooCommerceカタログの商品フィルタリングを高速化する方法
WooCommerceストアが数千以上の商品に成長すると、商品フィルターがボトルネックになる可能性があります。各タクソノミー用語にはカウントクエリが必要で、各属性は結合を追加し、動的再カウントはデータベースの作業を倍増させます。HUSKY(旧WOOF)には、大規模なカタログ向けに設計されたいくつかの組み込みキャッシュメカニズムとフックが含まれています。
キャッシュ動的再カウントを有効にする
HUSKY → 詳細設定 → オプション に、設定項目フィルター内の各アイテムの動的再カウント数をキャッシュするがあります。有効にすると、HUSKYは各用語の再カウント結果をWordPressオプションテーブルまたはトランジエントとして保存するため、後続のページ読み込みではカウントクエリが完全にスキップされます。これは、多くのタクソノミー用語を持つストアで動的再カウントを使用する場合に最も効果的なトグルです。
キャッシュは商品の変更時ではなく、スケジュールに基づいてクリアされます。間隔はキャッシュ設定の横にある自動クリーンオプションで設定されます(デフォルトの有効期限は1週間です)。商品のバッチを追加またはインポートした後、管理パネルの「キャッシュをクリア」ボタンを使用して手動でフラッシュできます。
キャッシュ用語を有効にする
再カウントキャッシュの隣にキャッシュ用語設定があります。フィルターフォームに多数の用語(数百の商品カテゴリー、属性、タグなど)が含まれている場合、このオプションはレンダリングされた用語リストをキャッシュするため、ページが読み込まれるたびにHTMLを再構築する必要がなくなります。
動作方法は再カウントキャッシュと同じで、スケジュールに基づいてクリアされ、独自の自動クリーン間隔と管理パネルの「用語キャッシュをクリア」ボタンがあります。深くネストされたカテゴリーツリーや多数の属性値を持つストアでは、両方のキャッシュを一緒に有効にすることで、リクエストごとのデータベース負荷が大幅に軽減されます。
事前生成された商品データにターボモードを使用する
ターボモードは、HUSKYが大規模カタログ向けに提供する最も強力な最適化です。有効にすると、商品パラメータを含むJSONデータファイルを事前生成します。フィルターリクエストごとに複雑なWP_Query + tax_query + meta_query を構築して実行する代わりに、プラグインは事前計算されたデータを読み取ります。大規模カタログでは、応答時間の差は顕著です。
ターボモードは HUSKY → 拡張機能 → ターボモード で設定します。ファイルの再生成はWordPress cronを介してスケジュールすることも、信頼性のために実際のサーバーcrontabを介してスケジュールすることもできます(ターボモードのcron設定に関するFAQを参照)。
ターボモードの商品制限を調整する
デフォルトでは、ターボモードはキャッシュ生成時に最大15,000商品を処理します。それ以上の商品があるストアでは、すべての商品がインデックス化される前に生成が停止します。woof_turbo_mode_products_limit フックを使用してこの制限を引き上げます:
add_filter('woof_turbo_mode_products_limit', function($limit) {
// Increase limit for catalogs larger than 15,000 products
return 50000;
});
フックは ext/turbo_mode/index.php にあります。カタログ全体をカバーできる十分な高い値を設定しますが、ファイル生成中のPHP実行時間とメモリ制限に注意してください。
大規模サイト向けにカウンター方法を最適化する
動的再カウントシステムは、多くの商品があるストアで大量のメモリを消費する可能性がある WP_Query ベースのカウンターを使用します。woof_counter_method フック(ソース:classes/counter.php)を使用すると、nopaging=false と posts_per_page=1 を設定する軽量なカウント方法に切り替えることができ、クエリごとのメモリを削減します:
add_filter('woof_counter_method', function($saving_memory) {
// Enable memory-saving counter mode
return true;
});
まずステージングサイトでこれをテストしてください。一部の構成ではうまく機能しますが、すべてではありません。
woof_products_query で商品出力をカスタマイズする
woof_products_query フィルターフック(ソース:index.php)は、[woof_products] ショートコードの WP_Query が実行される前にその $query_args 配列を渡します。これを使用して、カスタムメタクエリを追加したり、特定の商品を出力から除外したり、クエリ構造を調整したりできます:
add_filter('woof_products_query', function($query_args) {
// Exclude products that should never appear in filter results
$query_args['meta_query'][] = array(
'key' => '_exclude_from_filter',
'compare' => 'NOT EXISTS'
);
return $query_args;
});
タクソノミーレベルの操作(タクソノミー間の関係演算子の変更)には、関連する woof_main_query_tax_relations フックを使用します。
フィルターデータにWordPressオブジェクトキャッシュを有効にする
HUSKYは、内部データをWordPressオブジェクトキャッシュ経由でルーティングするための woof_use_wp_cache フックをサポートしています。永続オブジェクトキャッシュバックエンド(Redis、Memcached)をすでに使用している場合、このフックを有効にすると、フィルターデータがデータベースから高速なインメモリストレージに移動します:
add_filter('woof_use_wp_cache', function($is){
return true;
});
重要:このフックは、永続オブジェクトキャッシュプラグインがインストールされていないと効果がありません。組み込みのキャッシュ設定の代わりになるものではなく、ホスティング環境がオブジェクトキャッシュをサポートしている場合にそれらを補完します。
最良の結果を得るために設定を組み合わせる
大規模カタログ(10,000以上の商品、多数のタクソノミー用語)における推奨ベースライン:
- 詳細設定 → オプション で「キャッシュ動的再カウント」と「キャッシュ用語」を有効にする
- ターボモード を有効にし、商品制限をカタログサイズに合わせて設定する
- 永続オブジェクトキャッシュが利用可能な場合は
woof_use_wp_cacheを適用する - ステージングで
woof_counter_methodをテストし、メモリ節約モードがセットアップで機能するか確認する - [woof_products] 出力クエリを調整する必要がある場合のみ
woof_products_queryを使用する
まずは2つの組み込みキャッシュトグルから始めてください。コード変更は不要で、それだけで最も顕著な改善が得られます。