我正在尝试实现一种功能,以能够使用自定义属性(显示在产品视图的输入字段中)更新购物车商品。
我的策略是通过在购物车页面中添加如下链接来删除现有商品:
/ product / my-product /?edit_item = 7326b7ed789bc9ae1ddfe97fd0abcf72(密钥)
然后,一旦用户点击“添加到购物车”,我想删除该产品。
我在这里尝试过此解决方案(第一个答案):
Remove a specific cart item when adding to cart a specific product in Woocommerce
和这个(也是第一个答案):
Wordpress. Woocommerce. Action hook BEFORE adding to cart
我现在有以下代码:
function so_validate_add_cart_item( $passed, $product_id, $quantity, $variation_id = '', $variations= '' ) {
GLOBAL $woocommerce;
$keytoremove=$_GET['edit_item'];
// do your validation, if not met switch $passed to false
if ( 1 != 2 ){
$passed = true;
// $woocommerce->cart->remove_cart_item($keytoremove);
wc_add_notice( __( $keytoremove. ' was removed', 'textdomain' ), 'notice' );
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );
问题是我无法访问变量... $ _GET ['edit_item']为空。 因此,我得到通知“已删除”。 添加隐藏的表单字段也无济于事。
如何访问此变量? 谢谢!
答案 0 :(得分:0)
我现在将要删除的产品的密钥存储在会话中,并在删除后将其删除。看起来像这样:
我定义了会话变量:
$_SESSION['keytoremove'] = $_GET['edit_item'];
然后我的函数执行以下操作:
function so_validate_add_cart_item( $passed, $product_id, $quantity, $variation_id = '', $variations= '' ) {
GLOBAL $woocommerce;
if ( isset ($_SESSION['keytoremove']) ) {
$keytoremove=$_SESSION['keytoremove'];
$passed = true;
$woocommerce->cart->remove_cart_item($keytoremove);
wc_add_notice( __( $keytoremove. ' was removed from the cart', 'textdomain' ), 'notice' );
unset ($_SESSION["keytoremove"]);
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_validate_add_cart_item', 10, 5 );
经过测试,可以正常工作。也许有更好的解决方案,避免使用$ _SESSION-Vars?