Wordpress。Woocommerce。添加到购物车之前的操作挂钩

Wordpress。Woocommerce。添加到购物车之前的操作挂钩,wordpress,hook,woocommerce,Wordpress,Hook,Woocommerce,我需要做什么: 在添加到购物车之前,我想对产品进行一些检查。 更确切地说: 我想将要添加到购物车的产品与已经添加的产品进行比较,看看是否存在一些冲突。 例如: 假设我们有一个名为“双鞋”的产品和一个名为“左鞋”的产品。 用户将“左鞋”添加到购物车。然后他加上了“两双鞋”。我想打印一个错误,而不是添加“双鞋”:对不起,如果您已将左鞋添加到购物车,则无法同时添加双鞋。如果您想购买“双鞋”,请先脱下“左鞋” 我查看了class-wc-cart.php,在第811行发现了一个动作挂钩,,,但为时已晚!这

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

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

“执行操作('woocommerce\u add\u to\u cart',$cart\u item\u key,$product\u id,$quantity,$variation\u id,$variation,$cart\u item\u data);”

添加到购物车方法从第705行开始。

我的“产品冲突管理器”功能如何在第801行之前挂接,而不侵入woocommerce?


谢谢大家!

有点晚了,但我认为您正在寻找可过滤的添加到购物车验证。这里有一个过于简化的版本:

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

如果我要破解它,我只需在第799行添加以下行:
If(!do_action('woocommerce_before_add_to_cart',$cart_item_key,$product_id,$quantity,$variation_id,$variation,$cart_item_data)){返回false;}
并使用
添加操作(“添加到购物车之前的woocommerce”和“添加到购物车冲突管理”,10,6)在my functions.php^或类似的东西中,黑客最终实际上是一个过滤器,而不是一个操作
//这应该用来处理产品冲突,并检查用户是否已经有权访问产品//$product\u conflict\u error=apply\u filters('woocommerce\u在添加到购物车之前,$cart\u item\u key,$product\u id,$quantity,$variation\u id,$variation,$cart\u item\u data,$product\u data);if(product\u conflict\u error){$woocommerce->add\u error($product\u conflict\u error,'woocommerce'));返回false;}
你找到这个问题的答案了吗?我遇到了同样的问题,没有找到正确的钩子。谢谢!^^^^这完全让我走上了正确的道路;但是,我注意到
添加过滤器
行上有一个错误的右括号,它需要过滤器集的参数数量和优先级(
add\u filter('woocommerce\u add\u to\u cart\u validation','so\u validate\u add\u cart\u item',10,5);
),否则它将抛出一个错误。通过ajax添加产品时,我们如何使其工作?即使通过ajax添加产品,也会运行验证。