无法以编程方式从WooCommerce购物车中删除产品

时间:2020-01-03 作者:Will Ashworth

我正在使用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以编程方式将其删除。

1 个回复
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转储一些内容以优化调试

相关推荐

Row actions not showing? Why?

我建造了一个WP_List_Table 显示在我构建的自定义主题页面上。尽管我查看了Internet上关于WP\\U List\\U表格的所有可能信息,但在显示行操作时遇到了一些问题。任何帮助都会很好!class Testimonials_List_Table extends WP_List_Table { function __construct() { parent::__construct( array( \'singular\'=> \'te