【问题标题】:Get in WooCommerce cart the product ID of a cart item在 WooCommerce 购物车中获取购物车项目的产品 ID
【发布时间】:2017-04-27 12:41:34
【问题描述】:
$cart_item = $woocommerce->cart->get_cart(); 

我有上面的代码。

如果我在 cart_item 上运行 print_r,我会得到一个多维数组:

Array(    [a6292668b36ef412fa3c4102d1311a62] => Array        (            [product_id] => 6803

如何仅获取 product_id?

我试过 $test = $cart_item['data'];

print_r($test);

没用。

【问题讨论】:

    标签: php wordpress woocommerce cart product


    【解决方案1】:

    要获取 foreach 循环中每个购物车项目的 product ID(对于简单产品):

    foreach( WC()->cart->get_cart() as $cart_item ){
        $product_id = $cart_item['product_id'];
    }
    

    如果是可变产品,获取variation ID

    foreach( WC()->cart->get_cart() as $cart_item ){
        $variation_id = $cart_item['variation_id'];
    }
    

    或者对于这两种情况(其中 $cart_item['data'] WC_Product Woocommerce 3+ 中的对象)

    foreach( WC()->cart->get_cart() as $cart_item ){
        // compatibility with WC +3
        if( version_compare( WC_VERSION, '3.0', '<' ) ){
            $product_id = $cart_item['data']->id; // Before version 3.0
        } else {
            $product_id = $cart_item['data']->get_id(); // For version 3 or more
        }
    }
    

    更新:在循环外使用产品 ID

    1) 打破循环(只是为了获取购物车的第一个商品ID(产品ID))

    foreach( WC()->cart->get_cart() as $cart_item ){
        $product_id = $cart_item['product_id'];
        break;
    }
    

    您可以直接使用购物车中第一项的$product_id变量。


    2) 使用产品 ID 数组(购物车中的每个商品一个)

    $products_ids_array = array();
    
    foreach( WC()->cart->get_cart() as $cart_item ){
        $products_ids_array[] = $cart_item['product_id'];
    }
    
    • 获取第一件商品ID:$products_ids_array[0];
    • 获取第二件商品ID:$products_ids_array[1];等……

    要检查购物车项目中的产品类别产品标签,请使用 WordPress has_term() like:

    foreach( WC()->cart->get_cart() as $cart_item ){
        // For product categories (term IDs, term slugs or term names)
        if( has_term( array('clothing','music'), 'product_cat', $cart_item['product_id'] ) ) {
            // DO SOMETHING
        }
    
        // For product Tags (term IDs, term slugs or term names)
        if( has_term( array('clothing','music'), 'product_tag', $cart_item['product_id'] ) ) {
            // DO SOMETHING ELSE
        }
    }
    

    当购物车项目是产品变体时,我们总是使用$cart_item['product_id'] 来获取父变量产品。

    产品变体不处理任何自定义分类作为产品类别和产品标签

    【讨论】:

    • 必须在for循环中吗?
    • 我可以在 for 循环之外使用 $product_id 吗?
    • @Kevin.a 是的,它必须在一个循环中,因为您可以在购物车中拥有多个商品,并且使用购物车关键商品获取它非常复杂(正如您在您的问题:Array( [a6292668b36ef412fa3c4102d1311a62])。是的,您可以在循环外使用此 ID,查看我的更新
    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2020-02-28
    • 2015-03-31
    • 1970-01-01
    • 2017-04-28
    • 2017-01-03
    相关资源
    最近更新 更多