首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式删除WooCommerce产品

以编程方式删除WooCommerce产品
EN

Stack Overflow用户
提问于 2015-06-02 06:37:22
回答 3查看 703关注 0票数 1

目前,我正在动态添加产品+优惠券,如果一个项目进入客户的购物车。

代码语言:javascript
复制
// add Sufficiency Naked Calories to cart

add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
    if (is_admin()) {
        return;
    }

    $cart = WC()->cart->get_cart();
    $products_to_check = array(10305, 10302, 10300, 10303, 10301);
    $book = 10311;
    $coupon_code = 'nutreincesufficiencyquiznakedcalories';
    foreach ($cart as $cart_item_key => $values) {
        $_product = $values['data'];

        if ($_product->id == $book) return; // product has already been added
        if (in_array($_product->id, $products_to_check)) {
            WC()->cart->add_to_cart($book);
            WC()->cart->add_discount($coupon_code);
            break;
        }
    }
}

我想编写一个函数,允许我在数组$products_to_check中的任何物品离开购物车时删除$book

到目前为止,我的尝试都没有成功

代码语言:javascript
复制
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
    if (is_admin()) {
        return;
    }

    $cart = WC()->cart->get_cart();
    $products_to_check = array(10305, 10302, 10300, 10303, 10301);
    $book = 10311;
    $coupon_code = 'nutreincesufficiencyquiznakedcalories';
    foreach ($cart as $cart_item_key => $values) {
        $_product = $values['data'];

        if ($_product->id == $book) return; // product has already been added
        if (in_array($_product->id, $products_to_check)) {
            WC()->cart->add_to_cart($book);
            WC()->cart->add_discount($coupon_code);
        }

        if (in_array($_product->id, $products_to_check)) {
            return;
        } else {
            WC()->cart->remove_cart_item($book);
        }
    }
}

尝试#2

代码语言:javascript
复制
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
    function wc_custom_add_to_cart( $product )
    {
        if (is_admin()) {
            return;
        }

        $cart = WC()->cart->get_cart();
        $nutreince_sufficiency = array(10305, 10302, 10300, 10303, 10301);
        $book = 10310;
        $nutincart = false;
        $coupon_code = 'nutreincesufficiencyquiznakedcalories';
        foreach ($cart as $cart_item_key => $values) {
            $_product = $values['data'];

            if (in_array($_product->id, $nutreince_sufficiency)) {
                $nutincart = true;
                break;
            }
        }

        if ($nutincart) {
            WC()->cart->add_to_cart($book);
            WC()->cart->add_discount($coupon_code);
        } else {
            echo $_product->id;
            WC()->cart->set_quantity($book, 0);
        }
    }

将产品从购物车中移走后,书仍然留在那里。

EN

回答 3

Stack Overflow用户

发布于 2019-11-08 18:13:51

在下面的示例中,我的目标产品ID = 282,并检查当前购物车总数是多少。如果我超过了50美元的门槛,代码片段就会遍历购物车中的项目,如果找到产品就会停止。在这个阶段,它存储它的“购物车项目键”,最后使用remove_cart_item()函数删除它。

代码语言:javascript
复制
add_action( 'template_redirect', 'remove_product_from_cart_programmatically' );

function remove_product_from_cart_programmatically() {
 if ( is_admin() ) return;
     $product_id = 282; // product id
     $cart_total = 50; // replace with threshold
     $in_cart = false;
 foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
     if ( $cart_item['product_id'] === $product_id ) {
      $in_cart = true;
      $key = $cart_item_key;
      break;
     }
 }
  if( WC()->cart->total > $cart_total ) {
    if ( $in_cart ) WC()->cart->remove_cart_item( $key );
  }
 }
票数 1
EN

Stack Overflow用户

发布于 2015-06-02 15:21:30

尝试更改add_action优先级以覆盖您的函数

帮助link

票数 0
EN

Stack Overflow用户

发布于 2015-06-03 11:36:53

函数set_quantity需要使用$cart_item_key作为目标产品,而不是$_product_id

代码语言:javascript
复制
add_action( 'wp_loaded', 'wc_custom_add_to_cart', 80 );
function wc_custom_add_to_cart( $product )
{
    if (is_admin()) {
        return;
    }

    $cart = WC()->cart->get_cart();
    $nutreince_sufficiency = array(10305, 10302, 10300, 10303, 10301);
    $book = 10310;
    $nutincart = false;
    $book_cart_reference = 0;
    $coupon_code = 'nutreincesufficiencyquiznakedcalories';
    foreach ($cart as $cart_item_key => $values) {
        $_product = $values['data'];

        if (in_array($_product->id, $nutreince_sufficiency)) {
            $nutincart = true;
            break;
        }

        // get cart item key for $book
        if ( $_product->id == $book )
        {
                $book_cart_reference = $cart_item_key;
        }
    }

    if ($nutincart) {
        WC()->cart->add_to_cart($book);
        WC()->cart->add_discount($coupon_code);
    } else {
        WC()->cart->set_quantity($book_cart_reference, 0);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30584461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档