2018 Cập nhật:
- Làm rõ câu trả lời với 2 trường hợp xảy ra
- gia tăng khả năng tương thích cho woocommerce 3+
Vì vậy, Có thể có 2 trường hợp:
1) Lấy dữ liệu meta sản phẩm (chưa xác định trong mục thứ tự dữ liệu meta):
Bạn sẽ cần phải nhận được ID sản phẩm trong vòng lặp foreach cho một WC_Order
và để có được một số siêu dữ liệu cho sản phẩm này, bạn wil sử dụng get_post_meta()
chức năng (nhưng không wc_get_order_item_meta()
).
Vì vậy, đây là mã của bạn:
global $post;
$order = wc_get_order($post->ID);
$items = $order->get_items();
foreach ($order->get_items() => $item) {
// Compatibility for woocommerce 3+
$product_id = version_compare(WC_VERSION, '3.0', '<') ? $item['product_id'] : $item->get_product_id();
// Here you get your data
$custom_field = get_post_meta($product_id, '_tmcartepo_data', true);
// To test data output (uncomment the line below)
// print_r($custom_field);
// If it is an array of values
if(is_array($custom_field)){
echo implode('<br>', $custom_field); // one value displayed by line
}
// just one value (a string)
else {
echo $custom_field;
}
}
2) Nhận hàng trật tự dữ liệu meta giá trị (lĩnh vực tùy chỉnh):
global $post;
$order = wc_get_order($post->ID);
$items = $order->get_items();
foreach ($order->get_items() as $item_id => $item) {
// Here you get your data
$custom_field = wc_get_order_item_meta($item_id, '_tmcartepo_data', true);
// To test data output (uncomment the line below)
// print_r($custom_field);
// If it is an array of values
if(is_array($custom_field)){
echo implode('<br>', $custom_field); // one value displayed by line
}
// just one value (a string)
else {
echo $custom_field;
}
}
Nếu dữ liệu lĩnh vực tùy chỉnh là một mảng, bạn có thể truy cập dữ liệu trong vòng lặp foreach:
// Iterating in an array of keys/values
foreach($custom_field as $key => $value){
echo '<p>key: '.$key.' | value: '.$value.'</p>';
}
Tất cả mã đều được kiểm tra và hoạt động.
tham khảo liên quan đến dữ liệu trong đơn đặt hàng:
Xin chào, cảm ơn phản hồi của bạn. Tuy nhiên, $ item ['product_id'] chỉ có thể nhận order_id và nó không hữu ích cho tôi. Bạn có thể xem hình ảnh của tôi ở trên (http://i.stack.imgur.com/8OJ7U.jpg). Tất cả những gì tôi có thể nhận được là ID sản phẩm trong cột meta_value (số 90), nhưng những gì tôi cần là số trong order_item_id (1 hoặc 2) để tôi có thể nhận được giá trị của _tmcartepo_data meta_key. Bất kỳ ý tưởng? – camelot
Tôi hiện đang nhận được "Gọi đến một thành viên chức năng get_items() trên boolean" lỗi để gọi get_items() (WP 4.6.1 và WC 2.6.4). Đang cố gắng tìm ra lý do tại sao, nhưng có vẻ như bạn chỉ cho tôi đúng hướng. – camelot