Woocommerce 3에서 주문에서 선택한 변경 속성 가져오기
우커머스에서는 판매 제품을 집계하는 보고서를 관리 영역에 두고 있습니다.사이트에서 판매하는 제품은 5개뿐인데 일부 제품에는 1개 또는 2개의 변형이 있습니다.이 보고서는 잘 작동하지만 변형은 무시합니다.
나는 정확하게 데이터를 표시하기 위해 주문한 항목에서 속성 값을 검색해야 합니다.이거 어떻게 해요?
get_variation_description()
제가 적용하는 방식으로는 작동하지 않습니다.
내 코드:
$order = wc_get_order( $vs);
//BEGIN NEW RETRIEVE ORDER ITEMS FROM ORDER
foreach( $order->get_items() as $item_id => $item_product ){
$ods = $item_product->get_product_id(); //Get the product ID
$odqty= $item_product->get_quantity(); //Get the product QTY
$item_name = $item_product->get_name(); //Get the product NAME
$item_variation = $item_product->get_variation_description(); //NOT WORKING
}
2020년 업데이트 - "Custom Product Attribute" 취급 (변경 코드)
WC_Product 방법get_variation_description()
시대에 뒤떨어졌고 더 이상 사용되지 않습니다.로 대체되었습니다.get_description()
방법.그래서 당신은 그들을 위해WC_Product
먼저 목적을 정합니다.
선택한 변동 속성을 얻으려면 다음을 사용합니다.
get_variation_attributes( )
방법.
// Get an instance of the WC_Order object from an Order ID
$order = wc_get_order( $order_id );
// Loop though order "line items"
foreach( $order->get_items() as $item_id => $item ){
$product_id = $item->get_product_id(); //Get the product ID
$quantity = $item->get_quantity(); //Get the product QTY
$product_name = $item->get_name(); //Get the product NAME
// Get an instance of the WC_Product object (can be a product variation too)
$product = $item->get_product();
// Get the product description (works for product variation too)
$description = $product->get_description();
// Only for product variation
if( $product->is_type('variation') ){
// Get the variation attributes
$variation_attributes = $product->get_variation_attributes();
// Loop through each selected attributes
foreach($variation_attributes as $attribute_taxonomy => $term_slug ){
// Get product attribute name or taxonomy
$taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
// The label name from the product attribute
$attribute_name = wc_attribute_label( $taxonomy, $product );
// The term name (or value) from this attribute
if( taxonomy_exists($taxonomy) ) {
$attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
} else {
$attribute_value = $term_slug; // For custom product attributes
}
}
}
}
다른 모든 제품 유형과 마찬가지로 제품의 다양성을 테스트하고 작동합니다.
주문품명과속성키를표시하는데완벽하게작동합니다.
foreach( $order->get_items() as $order_item_product ) {
$item_meta_data = $order_item_product->get_meta_data();
echo $product_name = $order_item_product->get_name();
echo '<br>';
foreach( $item_meta_data as $meta_data ) {
$meta_data_as_array = $meta_data->get_data();
echo $meta_data_as_array['key'].': '.$meta_data_as_array['value'].'<br>';
}
}
승낙된 답변을 바탕으로 오타를 수정할 수 있도록 하기 위해서입니다(다른 일을 할 평판이 없습니다).$attribute_value 속성 정의에 $term_slug이 표시됩니다.그것이 바로 달러가 빠진 것입니다.
// Get an instance of the WC_Order object from an Order ID
$order = wc_get_order( $order_id );
// Loop though order "line items"
foreach( $order->get_items() as $item_id => $item_product ){
$product_id = $item_product->get_product_id(); //Get the product ID
$quantity = $item_product->get_quantity(); //Get the product QTY
$product_name = $item_product->get_name(); //Get the product NAME
// Get an instance of the WC_Product object (can be a product variation too)
$product = $item_product->get_product();
// Get the product description (works for product variation)
$description = $product->get_description();
// Only for product variation
if($product->is_type('variation')){
// Get the variation attributes
$variation_attributes = $product->get_variation_attributes();
// Loop through each selected attributes
foreach($variation_attributes as $attribute_taxonomy => $term_slug){
$taxonomy = str_replace('attribute_', '', $attribute_taxonomy );
// The name of the attribute
$attribute_name = get_taxonomy( $taxonomy )->labels->singular_name;
// The term name (or value) for this attribute
$attribute_value = get_term_by( 'slug', $term_slug, $taxonomy )->name;
}
}
}
앞으로 이 문제를 알게 된 분들을 위해 마지막 속성 값이 표시되지 않는 문제가 발생했는데 관리자에서 주문을 보고 있으면 제대로 표시가 되고 있어서 WooCommerce 소스 코드로 뛰어들어 필요에 맞게 수정했습니다.직접 수정하려면 여기에서 코드를 확인할 수 있습니다.
\woocommerce\includes\admin\meta-boxes\views\html-order-item-meta.php
모든 키와 값을 표시하기 위해 수행한 작업은 다음과 같습니다.
$attribute_list = array();
// Start modified code from html-order-item-meta.php
$hidden_order_itemmeta = apply_filters(
'woocommerce_hidden_order_itemmeta',
array(
'_qty',
'_tax_class',
'_product_id',
'_variation_id',
'_line_subtotal',
'_line_subtotal_tax',
'_line_total',
'_line_tax',
'method_id',
'cost',
'_reduced_stock',
'_restock_refunded_items',
)
);
if ($meta_data = $item->get_formatted_meta_data('')) {
foreach ($meta_data as $meta_id => $meta) {
if (in_array($meta->key, $hidden_order_itemmeta, true)) {
continue;
}
$display_key = sanitize_text_field($meta->display_key);
$display_value = sanitize_text_field(force_balance_tags($meta->display_value));
$attribute_list[] = array($display_key => $display_value);
}
}
// End modified code from html-order-item-meta.php
if ($attribute_list) {
$attribute = '';
foreach ($attribute_list as $attributes) {
foreach ($attributes as $attr => $value) {
$attribute .= " - " . $attr . " : " . $value;
}
}
echo $attribute;
}
내 코드는 배열에 각 키와 값을 추가한 다음 루프를 통해 키와 값을 구분자가 있는 문자열 끝에 추가합니다.이것이 제가 작업하던 일에 필요했던 것이지만, 여러분의 요구에 맞게 쉽게 조정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/48390818/get-the-selected-variation-attributes-from-orders-in-woocommerce-3
'programing' 카테고리의 다른 글
Dojo를 이용하여 라이브 검색/검색 제안을 구현할 수 있는 방법은? (0) | 2023.10.11 |
---|---|
ORM(Object-Relational Mapping)에서 "N+1 선택 문제"는? (0) | 2023.10.11 |
액세스 거부됨예외:사용자에게 다음을 수행할 권한이 없습니다: 람다:함수 호출 (0) | 2023.10.11 |
많은 data.frame 병합 (0) | 2023.10.11 |
창문은 어떻게 만드나요?크롬 37에서 쇼모델 대화상자 작동? (0) | 2023.10.11 |