21

我需要做的: 我想在将产品添加到购物车之前对产品进行一些检查。 更准确地说: 我想将我即将添加到购物车的产品与已经添加的产品进行比较,看看是否存在一些冲突。 一个例子: 假设我们有一个名为“Both shoes”的产品和一个名为“left shoe”的产品。用户将“左鞋”添加到购物车。然后他添加了“双鞋”。我想打印一个错误而不是添加“双鞋”:抱歉,如果您已将左鞋添加到购物车,则无法同时添加这双鞋。如果要买“双鞋”,请先去掉“左鞋”。

我查看了 class-wc-cart.php 并在第811行找到了一个动作挂钩,但为时已晚!这是在添加产品之后

“do_action('woocommerce_add_to_cart',$ca​​rt_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

我的“产品冲突管理器”功能如何在第 801 行之前被钩住,而无需破解 woocommerce?

谢谢!

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 回答