概要
woocommerce_product_query
フィルタは、WooCommerceの製品クエリをカスタマイズできるフックです。このフィルタは、特定の条件に従って製品をフィルタリングしたり、クエリのデフォルト設定を変更したりする際に特に役立ちます。以下は、このフィルタがよく使われる機能の例です。
- 特定のカテゴリやタグに基づく製品のフィルタリング
- 製品の価格範囲での絞り込み
- 在庫商品や特定のステータス(例:販売中)の製品のみ表示
- 製品の並び順の変更(例:新着順や価格順)
- 特定のメタデータを持つ製品の抽出
- 特定のユーザーの閲覧履歴に基づく製品推薦
構文
add_filter('woocommerce_product_query', 'custom_function_name', 10, 2);
パラメータ
$query
: WP_Query のインスタンス。製品クエリの設定を保持します。$query_vars
: クエリ変数の配列。カスタマイズしたいクエリパラメータを含みます。
戻り値
$query
: フィルタリングした後の WP_Query のインスタンス。これにより、製品クエリの結果が変更されます。
使用可能なプラグインとバージョン
- WooCommerce バージョン:3.0.0 以降
- WordPress バージョン:4.0 以降
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | 〇 |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプル1: 特定のカテゴリに基づくフィルタリング
このコードは、特定のカテゴリに属する製品だけを表示します。
add_filter('woocommerce_product_query', 'filter_by_category');
function filter_by_category($query) {
if (is_shop() || is_product_category()) {
$query->set('tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => '特定のカテゴリスラッグ',
),
));
}
}
引用元: https://www.example.com/filter-by-category
サンプル2: 在庫のある商品だけを表示
在庫のある製品のみを表示するためのコードです。
add_filter('woocommerce_product_query', 'show_in_stock_products');
function show_in_stock_products($query) {
if (!is_admin() && (is_shop() || is_product_category())) {
$query->set('meta_query', array(
array(
'key' => '_stock_status',
'value' => 'instock',
),
));
}
}
引用元: https://www.example.com/show-in-stock-products
サンプル3: 製品の並び順を価格順に変更
製品を価格順に並べるためのフィルタリングコードです。
add_filter('woocommerce_product_query', 'custom_order_by_price');
function custom_order_by_price($query) {
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', '_price');
$query->set('order', 'ASC');
}
引用元: https://www.example.com/order-by-price
サンプル4: 税込み価格のフィルタリング
税込み価格でフィルタリングを行うコードです。
add_filter('woocommerce_product_query', 'filter_by_inclusive_price');
function filter_by_inclusive_price($query) {
$query->set('meta_query', array(
array(
'key' => '_price',
'value' => '1000',
'compare' => '<=',
'type' => 'NUMERIC',
),
));
}
引用元: https://www.example.com/filter-by-inclusive-price
サンプル5: メタデータによる製品の抽出
特定のメタデータを持つ製品のみを抽出するためのフィルタリングコードです。
add_filter('woocommerce_product_query', 'filter_by_custom_meta');
function filter_by_custom_meta($query) {
$query->set('meta_query', array(
array(
'key' => 'custom_meta_key',
'value' => 'custom_value',
'compare' => '=',
),
));
}
引用元: https://www.example.com/filter-by-custom-meta