web-dev-qa-db-ja.com

ワードプレス。 Woocommerce。カートに追加する前のアクションフック

する必要があること:カートに追加する前に、製品のチェックを実行したいです。 もっと正確に:カートに追加しようとしている製品と、すでに追加されている製品を比較して、競合があるかどうかを確認します。 例:「両方の靴」という名前の製品と「左の靴」という製品があるとします。ユーザーがカートに「左の靴」を追加します。次に、「両方の靴」を追加します。 「両方の靴」を追加する代わりにエラーを印刷したい:申し訳ありませんが、カートに左の靴を追加した場合、両方の靴を追加することはできません。 「両方の靴」を購入したい場合は、まず「左の靴」を外してください。

Class-wc-cart.phpを確認しましたが、行にアクションフックを見つけました811but手遅れです!製品が追加された後です

"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の前にフックするにはどうすればよいですか

ありがとうございました!

19

少し遅れましたが、カートに追加できる検証を探しています。これは非常に単純化されたバージョンです:

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 );
27
helgatheviking

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を返す;

}

0
Shubham Kumar