概要
woocommerce_product_data_store_cpt_get_products_query
フィルタは、WooCommerce プラグインで商品情報を取得する際に、データベースクエリをカスタマイズするために使用されます。このフィルタは、特に以下の機能を実装する際に役立ちます。
- 特定の条件に基づく商品フィルタリング
- カスタムメタデータに基づく商品取得
- 商品の並び順をカスタマイズ
- 在庫状況による商品表示の制御
- 限定的なユーザー向け商品表示
- 商品の検索条件を微調整
構文
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'custom_get_products_query', 10, 2);
パラメータ
$query
: WP_Query 引数の配列。この配列がフィルタされます。$query_vars
: 追加のクエリ変数が含まれる配列。
戻り値
返り値は、フィルタされた後の WP_Query 引数を含む配列です。この配列を使用して、特定の条件に合致する商品を取得します。
上位プラグインおよび WordPress バージョン
- WooCommerce バージョン: 5.0 以降 (具体的なバージョンによって異なる可能性があるため、最新のドキュメントを確認してください)
- WordPress バージョン: 5.0 以降
サンプルコード
サンプルコード 1: カスタム商品カテゴリのフィルタリング
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'custom_product_category_filter', 10, 2);
function custom_product_category_filter($query, $query_vars) {
if (!empty($query_vars['category'])) {
$query['tax_query'][] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $query_vars['category'],
);
}
return $query;
}
説明: 商品カテゴリーに基づいて商品をフィルタリングするためのクエリを構築しています。このフィルタを使用することで、特定のカテゴリーに属する商品だけを取得できます。
引用元: https://docs.woocommerce.com/document/
サンプルコード 2: カスタムメタデータによるフィルタリング
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'custom_meta_filter', 10, 2);
function custom_meta_filter($query, $query_vars) {
if (!empty($query_vars['custom_meta_key'])) {
$query['meta_query'][] = array(
'key' => 'custom_meta_key',
'value' => $query_vars['custom_meta_value'],
'compare' => '=',
);
}
return $query;
}
説明: カスタムメタデータを使用して商品をフィルタリングするクエリを追加しています。このフィルタを利用することで、特定のメタキーの値に基づく商品を選択できます。
引用元: https://woocommerce.com/document/
サンプルコード 3: 在庫がある商品のみを表示
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'stock_filter', 10, 2);
function stock_filter($query, $query_vars) {
$query['meta_query'][] = array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => '=',
);
return $query;
}
説明: 在庫がある商品だけを表示するためのフィルタを追加します。これにより、顧客が取り扱いできる商品だけが表示されます。
引用元: https://woocommerce.com/document/
サンプルコード 4: 商品の順序をカスタマイズ
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'custom_order_by', 10, 2);
function custom_order_by($query, $query_vars) {
if (isset($query_vars['orderby']) && 'custom' === $query_vars['orderby']) {
$query['orderby'] = 'meta_value_num';
$query['meta_key'] = 'custom_order_key';
$query['order'] = 'ASC';
}
return $query;
}
説明: カスタムの条件に基づいて商品順序を設定するためのクエリを変更しています。このフィルタを使うことで、特定のメタキーに基づいて商品を並べ替えることができます。
引用元: https://woocommerce.com/document/
サンプルコード 5: 特定の価格帯内の商品のみを取得
add_filter('woocommerce_product_data_store_cpt_get_products_query', 'price_range_filter', 10, 2);
function price_range_filter($query, $query_vars) {
if (!empty($query_vars['min_price']) && !empty($query_vars['max_price'])) {
$query['meta_query'][] = array(
'key' => '_price',
'value' => array($query_vars['min_price'], $query_vars['max_price']),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
);
}
return $query;
}
説明: 指定した価格帯内の商品のみを取得するためのフィルタを追加しています。これにより、価格が指定の範囲に該当する商品だけを抽出できます。
引用元: https://woocommerce.com/document/
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
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 |