我正在使用WooCommerce。在某些情况下,我希望从购物车中删除特定产品。我觉得我正在使用正确的方法来做这件事,但由于某种原因,它不起作用。其他与系统和主题相关的功能似乎正在发挥作用。
为了减少我们这里的例子的复杂性,我已经将我的总体尝试分解为我能想到的最简单的形式。最终,它将以逻辑的形式存在于我的主题中的PHP类/方法中。现在我在functions.php
只是为了排除可能导致我的问题的其他变量。
我的主要测试方法是刷新购物车页面,该页面当前包含该产品。在这一点上,我不知道还能做些什么。最终目标是刷新页面并看到产品从购物车中消失。
// ¯\\_(ツ)_/¯
add_action(\'template_redirect\', function () {
$product_id = 29690;
$product_cart_id = WC()->cart->generate_cart_id( $product_id );
$cart_item_key = WC()->cart->find_product_in_cart( $product_cart_id );
if ( $cart_item_key ) WC()->cart->remove_cart_item( $cart_item_key );
});
我是不是遗漏了什么?
Update 2020-01-03 15:32
希望与大家分享,在启用调试的情况下,前端控制台或PHP错误日志中都没有错误。WooCommerce没有抱怨或抛出错误。页面在刷新时加载;但物品仍留在购物车内。我还无法使用WooCommerce方法通过PHP以编程方式将其删除。
SO网友:Andrea Somovigo
我想你应该在钩子上使用你的功能woocommerce_add_to_cart
而不是template_redirect
罢工>
你的功能对我来说很好。尝试另一种同样有效的方法:
add_action(\'template_redirect\', function () {
$product_id = 29690;
foreach( WC()->cart->get_cart() as $key=>$item){
if($item[\'product_id\']==$product_id){
WC()->cart->remove_cart_item( $key );
}
}
// $product_cart_id = WC()->cart->generate_cart_id( $product_id );
// $cart_item_key = WC()->cart->find_product_in_cart( $product_cart_id );
// if ( $cart_item_key ) WC()->cart->remove_cart_item( $cart_item_key );
});
仔细检查$product\\u id,可能还需要var\\u转储一些内容以优化调试