WordPress的。 Woocommerce。动作钩子在添加到购物车之前

时间:2013-01-20 19:17:35

标签: wordpress hook woocommerce

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

我看过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

我的“产品冲突管理器”功能怎么能在第801行之前被吸引,没有黑客攻击的电子商务?

谢谢!

2 个答案:

答案 0 :(得分:26)

有点晚了,但我认为你正在寻找可以过滤的购物车验证。这是一个过度简化的版本:

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

答案 1 :(得分:-2)

add_filter('woocommerce_add_to_cart_validation','E_coding_hub_only_one_in_cart',99,2);

函数E_coding_hub_only_one_in_cart($ passed,$ added_product_id){

//先清空购物车:新商品将替换之前的商品 wc_empty_cart();

//如果愿意,显示一条消息

wc_add_notice(“对不起,但是如果您已将左鞋添加到购物车中,则不能同时添加两双鞋”,“ notice”);

返回$ pass;

}