する必要があること:カートに追加する前に、製品のチェックを実行したいです。 もっと正確に:カートに追加しようとしている製品と、すでに追加されている製品を比較して、競合があるかどうかを確認します。 例:「両方の靴」という名前の製品と「左の靴」という製品があるとします。ユーザーがカートに「左の靴」を追加します。次に、「両方の靴」を追加します。 「両方の靴」を追加する代わりにエラーを印刷したい:申し訳ありませんが、カートに左の靴を追加した場合、両方の靴を追加することはできません。 「両方の靴」を購入したい場合は、まず「左の靴」を外してください。
Class-wc-cart.phpを確認しましたが、行にアクションフックを見つけました811、but手遅れです!製品が追加された後です
"do_action( 'woocommerce_add_to_cart'、$ cart_item_key、$ product_id、$ quantity、$ variation_id、$ variation、$ cart_item_data);"
Add_to_cartメソッドは、行705から始まります。 http://wcdocs.woothemes.com/apidocs/source-class-WC_Cart.html#705
Woocommerceをハッキングせずに、「製品コンフリクトマネージャー」関数を行801の前にフックするにはどうすればよいですか?
ありがとうございました!
少し遅れましたが、カートに追加できる検証を探しています。これは非常に単純化されたバージョンです:
function so_validate_add_cart_item( $passed, $product_id, $quantity, $variation_id = '', $variations= '' ) {
// do your validation, if not met switch $passed to false
if ( 1 != 2 ){
$passed = false;
wc_add_notice( __( 'You can not do that', 'textdomain' ), 'error' );
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );
add_filter( 'woocommerce_add_to_cart_validation'、 'E_coding_hub_only_one_in_cart'、99、2);
function E_coding_hub_only_one_in_cart($ passed、$ added_product_id){
//最初に空のカート:新しいアイテムが以前のwc_empty_cart();を置き換えます
//必要に応じてメッセージを表示します
wc_add_notice( "申し訳ありませんが、左の靴をカートに追加した場合、両方の靴を追加することはできません"、 "通知");
$ passedを返す;
}