概要
woocommerce_add_to_cart_validation
フィルタは、WooCommerceのカートに商品を追加する際のバリデーションを実施するために使用されるフックです。このフィルタは、カートに追加しようとする商品データを検証し、特定の条件に基づいて処理を中止したり、エラーメッセージを表示したりする際に役立ちます。主に次のような機能を実装する際によく使われます。
- 商品の在庫状況を確認する
- ユーザーの購入権限を確認する
- 最小または最大購入数量を設定する
- 商品のカスタム条件をチェックする
- 特定のユーザーグループに対して制限を設ける
- 無料配送条件を満たしているか確認する
構文
add_filter( 'woocommerce_add_to_cart_validation', 'your_custom_validation_function', 10, 3 );
パラメータ
$passed
(bool): バリデーションが通過したかどうかのフラグ。$product_id
(int): カートに追加しようとしている製品のID。$quantity
(int): カートに追加しようとしている数量。
戻り値
- bool: バリデーションが成功した場合は
true
、失敗した場合はfalse
。
バージョン情報
- WooCommerce バージョン: 3.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_add_to_cart_validation', 'check_product_stock', 10, 3 );
function check_product_stock( $passed, $product_id, $quantity ) {
$product = wc_get_product( $product_id );
if ( ! $product->is_in_stock() ) {
wc_add_notice( 'この商品は在庫切れです。', 'error' );
return false;
}
return $passed;
}
引用元: https://woocommerce.com/
サンプル2: 最小数量の設定
このコードは、カートに追加する商品の最小数量を設定します。この条件を満たさない場合、エラーメッセージを表示します。
add_filter( 'woocommerce_add_to_cart_validation', 'set_min_order_quantity', 10, 3 );
function set_min_order_quantity( $passed, $product_id, $quantity ) {
$min_quantity = 5; // 最小数量
if ( $quantity < $min_quantity ) {
wc_add_notice( '最低でも' . $min_quantity . '個は購入してください。', 'error' );
return false;
}
return $passed;
}
引用元: https://woocommerce.com/
サンプル3: 特定のユーザーグループへの制限
このコードは、特定のユーザーが商品をカートに追加できるかどうかを制限します。
add_filter( 'woocommerce_add_to_cart_validation', 'restrict_based_on_user_role', 10, 3 );
function restrict_based_on_user_role( $passed, $product_id, $quantity ) {
if ( ! current_user_can( 'special_role' ) ) {
wc_add_notice( 'この商品は特定のユーザーグループのみに販売されています。', 'error' );
return false;
}
return $passed;
}
引用元: https://woocommerce.com/
サンプル4: カスタム条件の検証
このコードでは、特定の製品に別の条件をチェックし、条件を満たさない場合はエラーを返します。
add_filter( 'woocommerce_add_to_cart_validation', 'custom_conditions_check', 10, 3 );
function custom_conditions_check( $passed, $product_id, $quantity ) {
if ( $product_id == 123 && $quantity > 3 ) {
wc_add_notice( 'この商品は最大3個までしか購入できません。', 'error' );
return false;
}
return $passed;
}
引用元: https://woocommerce.com/
サンプル5: 無料配送条件の検証
このコードでは、ユーザーが無料配送の条件を満たしているかどうかをチェックします。
add_filter( 'woocommerce_add_to_cart_validation', 'check_for_free_shipping', 10, 3 );
function check_for_free_shipping( $passed, $product_id, $quantity ) {
$cart_total = WC()->cart->get_subtotal();
$free_shipping_threshold = 100; // 無料配送の閾値
if ( $cart_total + ( $quantity * get_post($product_id)->post_price ) < $free_shipping_threshold ) {
wc_add_notice( '合計が' . $free_shipping_threshold . '円未満なので、無料配送の条件を満たしていません。', 'error' );
return false;
}
return $passed;
}
引用元: https://woocommerce.com/