WooCommerce 从订单项目中获取产品变体属性名称和值

问题描述 投票:0回答:1

我正在为我的 WooCommerce 商店制作自定义感谢页面,我可以在其中正确显示购物车项目的属性和值,但在感谢页面中我未能显示您可以帮助我吗?

迷你购物车商品的工作代码:

$items = WC()->cart->get_cart();
foreach($items as $item => $values) {
    
    $cart_item = WC()->cart->cart_contents[ $item ];
    $variations   = wc_get_formatted_cart_item_data( $cart_item );
    if( $cart_item['data']->is_type( 'variation' ) ){
        $attributes = $cart_item['data']->get_attributes();
        $variation_names = array();
        if( $attributes ){
            foreach ( $attributes as $key => $value) {
                $variation_key =  end(explode('-', $key));
                $variation_names[] = ucfirst($variation_key) .' : '. $value;
            }
        }
        echo implode( '<br>', $variation_names );
        
    }
    
}

输出如下

Color : Red
Size  : 4mm

我喜欢在感谢页面中显示同样的内容,所以我将其重新编码为订单格式并循环遍历它,但这不起作用

$items = $order->get_items();
foreach ($items as $item_key => $item) {
    $product = $item->get_product(); 
    if( $product->is_type( 'variation' )){
        $attributes = $product->get_variation_attributes();
        $variation_names = array();
        if( $attributes ){
            foreach ( $attributes as $key => $value) {
                $variation_key =  end(explode('_', $key));
                $variation_names[] = ucfirst($variation_key) .' : '. $value;
            }
        }
        echo implode( '<br>', $variation_names );
    }
}
php wordpress woocommerce orders product-variations
1个回答
2
投票

更新 (也处理自定义属性)

使用

$item->get_product()
在产品变体上使用
WC_Product
方法从订单商品中获取当前
get_attributes()
对象,而不是仅在父变量产品上使用
get_variation_attributes()

$order_items = $order->get_items();

foreach ($order_items as $item_key => $item) {
    $product = $item->get_product(); // Get the WC_Product Object

    if( $product->is_type( 'variation' ) ){
        $attributes = $product->get_attributes();
        $data_array = array();

        if( $attributes ){
            foreach ( $attributes as $meta_key => $meta ) {
                $display_key   = wc_attribute_label( $meta_key, $product );
                $display_value = $product->get_attribute($meta_key);
                $data_array[]  = $display_key .' : '. $display_value;
            }
        }
        echo implode( '<br>', $data_array ) . '<br>';
    }
}

现在应该可以工作了,对于普通产品属性和自定义属性也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.