WordPress。电子商务。添加到购物车之前的操作挂钩

Posted

技术标签:

【中文标题】WordPress。电子商务。添加到购物车之前的操作挂钩【英文标题】:Wordpress. Woocommerce. Action hook BEFORE adding to cart 【发布时间】:2013-01-03 21:27:53 【问题描述】:

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

我查看了 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 行之前挂钩我的“产品冲突管理器”功能,无需破解 woocommerce?

谢谢!

【问题讨论】:

如果我要破解它,我只需在第 799 行添加以下行:if(!do_action( 'woocommerce_before_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data )) return false; 并在我的 functions.php 中使用 add_action ('woocommerce_before_add_to_cart','add_to_cart_conflict_manage',10,6); ^ 或类似的东西 黑客实际上是一个过滤器而不是一个动作// This is supposed to handle product conflicts and check if user already has access to the product // $product_conflict_error = apply_filters( 'woocommerce_before_add_to_cart', $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data,$product_data); if (product_conflict_error) $woocommerce->add_error( __($product_conflict_error, 'woocommerce') ); return false; 你找到了这个问题的答案吗?我遇到了同样的问题,但没有找到正确的钩子。 【参考方案1】:

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

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

【讨论】:

谢谢! ^_^ 这完全让我走上了正确的道路;但是,我注意到add_filter 行上有一个错误的右括号,它需要过滤器集的参数数量以及优先级(add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5);),否则会抛出错误。 通过ajax添加产品时如何让它工作? 即使通过 ajax 添加产品也会运行验证。

以上是关于WordPress。电子商务。添加到购物车之前的操作挂钩的主要内容,如果未能解决你的问题,请参考以下文章

如何在添加到购物车按钮旁边移动数量输入字段 - wordpress

WooCommerce:为特定页面添加使用 WordPress 自定义字段添加到购物车旁边的自定义按钮

创建唯一的字典键

WordPress/WooCommerce-将“添加到购物车”按钮重定向到“签出”页面

有没有办法在不刷新页面的情况下在电子商务网站中创建“添加到购物车”?

添加到 WooCommerce 购物车时如何重置所有字段