woocommerce - 在 WooCommerce 中添加另一个时删除一个特定的购物车项目
问题描述
我正在尝试实现一个功能,以便能够使用自定义属性更新购物车项目(显示在产品视图的输入字段中)。
我的策略是通过在购物车页面中添加一个链接来删除现有项目,如下所示:
/product/my-product/?edit_item=7326b7ed789bc9ae1ddfe97fd0abcf72(密钥)
然后,一旦用户单击“添加到购物车”,我想删除该产品。
我在这里尝试过这个解决方案(第一个答案):
在 Woocommerce 中将特定产品添加到购物车时删除特定购物车项目
而这个(也是第一个答案):
我现在有这个代码:
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'] 是空的。所以我收到通知“已删除”。添加隐藏的表单域也无济于事。
我怎样才能访问这个变量?谢谢!
解决方案
我现在已将要删除的产品的密钥存储在会话中,并在删除后将其删除。看起来像这样:
我已经定义了会话变量:
$_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?
推荐阅读
- yii2 - Yii2 renderPartial detailview in other view
- ios - 如何在 iOS 中点击按钮时增加按钮大小?
- c++ - 将派生模板类分配给基类模板
- python - Pygame碰撞,属性错误
- ats - 如何解决对 dynloadflag 的未定义引用?
- android - Android Studio:将按钮高度/长度设置为 Android 设备的某个百分比?
- java - 在android studio的侧面片段中显示倒数计时器?
- haskell - MonadWriter 类中的冗余
- excel - Sumifs和引用公式中另一个单元格中的文本
- navigation - 离子 - 菜单活动状态在点击时不会改变