21

私がしなければならないこと: カートに追加する前に、商品をチェックしたいです。 より正確 には、カートに追加しようとしている製品と、すでに追加されている製品を比較して、競合があるかどうかを確認したいと考えています。 例: 「両方の靴」という名前の製品と、「左の靴」という製品があるとします。ユーザーが「左の靴」をカートに追加します。次に、「両方の靴」を追加します。「両方の靴」を追加する代わりにエラーを印刷したい: 申し訳ありませんが、カートに左の靴を追加した場合、両方の靴を追加することはできません。「両方の靴」を購入したい場合は、最初に「左の靴」を削除してください。

class-wc-cart.php を調べたところ、811行目にアクション フックが見つかりましたが、手遅れです。商品追加後です

"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 行目の前に「製品競合マネージャー」機能をフックするにはどうすればよいですか?

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

4

1 に答える 1

36

少し遅れましたが、フィルタリング可能なカートへの追加の検証を探していると思います。これは単純化されたバージョンです:

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 );
于 2014-03-31T00:02:50.760 に答える