Woocommerce 3 中订单项的产品属性空值
Product attribute empty value from order item in Woocommerce 3
我知道已经有很多关于这个问题的问题,但我无法弄清楚如何从 woocommerce 订单中获取自定义产品属性。这是我尝试过的:
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
foreach ($order->get_items() as $item_key => $item_values) {
$product = $item_values->get_product(); // Get the product
$product_id = $item_values->get_product_id(); // the Product id
$tokens = get_post_meta($product_id, 'Tokens', true);
}
我也试过了:
$tokens = $product->get_attribute( 'Tokens' );
和
$tokens = array_shift( wc_get_product_terms( $product_id, 'Tokens', array( 'fields' => 'names' ) ) );
我的自定义产品属性的名称为“Tokens”,值为 5000,但我得到的是空 return,
我做错了什么?
当产品属性 未设置为变体 的属性时, 可变产品 可能会发生这种情况。
所以当您有一个产品变体作为订单项时,您需要获取父变量产品来获取您的产品属性值(如果此产品属性未设置为变体属性)。
如果 "Tokens" 产品属性是这种情况,请尝试以下操作:
$attribute = 'Tokens';
$order = wc_get_order( 857 );
// Loop through order line items
foreach ( $order->get_items() as $item_id => $item ) {
$product = $item->get_product(); // Get the WC_Product object
// For Product Variation type
if( $item->get_variation_id() > 0 ){
$parent = wc_get_product($product->get_parent_id());
$term_names = $parent->get_attribute($attribute);
}
// For other Product types
else {
$term_names = $product->get_attribute($attribute);
}
// Testing display (the string of coma separated term names if many)
if( ! empty( $term_name ) )
echo '<p>'.$term_name.'</p>';
}
在 Woocommerce 3+ 中测试和工作
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
foreach ($order->get_items() as $item_key => $item_values) {
$product = $item_values->get_product(); // Get the product
$product_id = $item_values->get_product_id(); // the Product id
$tokens = get_post_meta($product_id, 'Tokens', true);
}
我也试过了:
$tokens = $product->get_attribute( 'Tokens' );
和
$tokens = array_shift( wc_get_product_terms( $product_id, 'Tokens', array( 'fields' => 'names' ) ) );
我的自定义产品属性的名称为“Tokens”,值为 5000,但我得到的是空 return,
我做错了什么?
当产品属性 未设置为变体 的属性时, 可变产品 可能会发生这种情况。
所以当您有一个产品变体作为订单项时,您需要获取父变量产品来获取您的产品属性值(如果此产品属性未设置为变体属性)。
如果 "Tokens" 产品属性是这种情况,请尝试以下操作:
$attribute = 'Tokens';
$order = wc_get_order( 857 );
// Loop through order line items
foreach ( $order->get_items() as $item_id => $item ) {
$product = $item->get_product(); // Get the WC_Product object
// For Product Variation type
if( $item->get_variation_id() > 0 ){
$parent = wc_get_product($product->get_parent_id());
$term_names = $parent->get_attribute($attribute);
}
// For other Product types
else {
$term_names = $product->get_attribute($attribute);
}
// Testing display (the string of coma separated term names if many)
if( ! empty( $term_name ) )
echo '<p>'.$term_name.'</p>';
}
在 Woocommerce 3+ 中测试和工作