Nhận id sản phẩm từ id đơn hàng trong Wooc Commerce [đã đóng]


38

Tôi đang gặp rắc rối với chi tiết sản phẩm Wooc Commerce và mối quan hệ chi tiết đơn hàng. Tôi không thể tìm thấy ID sản phẩm của ID đơn hàng liên quan trên trang Xem đơn hàng của chủ đề Wooc Commerce. Tôi chỉ đơn giản muốn nhận nội dung sản phẩm và permalink, vv trên trang Xem Đơn hàng .

Tôi đã cố gắng tìm kiếm trong wp_postmetanhưng không có may mắn.

Câu trả lời:


68

WooC Commerce 3.0+

bạn có thể nhận được các mục đặt hàng của một đơn đặt hàng bằng cách

$order = wc_get_order( $order_id );
$items = $order->get_items();

sau đó nếu bạn lặp qua các mục, bạn có thể nhận được tất cả các dữ liệu liên quan:

foreach ( $items as $item ) {
    $product_name = $item->get_name();
    $product_id = $item->get_product_id();
    $product_variation_id = $item->get_variation_id();
}

một mẹo hay là kiểm tra cách các trang đặt hàng của quản trị viên lấy dữ liệu, bạn sẽ tìm thấy nhiều câu trả lời ở đó!

Tiền thương mại 3.0

$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
}

Trừ khi tôi thiếu thứ gì đó, cái này dường như không hoạt động trong phiên bản mới nhất của WooC Commerce ...
rnevius

Vẫn hoạt động trong WooC Commerce 2.4.8 đối với tôi, nhưng bạn cần phải xác định biến $ order_id (đôi khi, đó là trong $ order-> id, tùy thuộc vào ngữ cảnh của bạn).
Ewout

@mevius tôi đã thêm một chỉnh sửa cho 3+ với chức năng điều phối để kiểm tra nhiều sản phẩm
Garet Claborn

xem lịch sử chỉnh sửa cho bộ điều phối, điều này không tốt nếu không có nó vì nó sẽ ăn hết máy chủ của bạn một cách vô nghĩa
Garet Claborn

@GaretClaborn hoàn toàn phụ thuộc vào những gì bạn đang làm với dữ liệu này. 'Như là', đoạn ví dụ này không lãng phí bộ nhớ theo bất kỳ cách nào.
Ewout

6

Tôi đã làm việc trên nó và đạt được một cái gì đó. Điều đó tôi muốn chia sẻ với các nhà phát triển khác. Đây không phải là cách ưa thích để làm điều đó, nhưng vì kiến ​​thức tôi đang đăng câu trả lời của mình.

global $wpdb;
            $result = $wpdb->get_results('select t1.order_item_id, t2.* FROM 
            wp_woocommerce_order_items as t1 JOIN wp_woocommerce_order_itemmeta as t2 ON t1.order_item_id = t2.order_item_id
            where t1.order_id='.$order->ID);
            echo '<pre>';
            print_r($result);
            echo '</pre>'; 

hy vọng sẽ giúp được ai đó

Ngoài ra:

Tốt hơn là sử dụng tiền tố bảng wordpress để tránh các vấn đề trong nhiều trang web hoặc di chuyển, v.v.

global $wpdb;
$table_name = $wpdb->prefix . 'table_name'; 

1
@ErenorPaz Cảm ơn, tôi đã thêm nội dung trong câu trả lời, để trả lời nhận xét của bạn :)
arslaan ejaz

Cảm ơn bạn đã phản hồi nhanh chóng, ngay cả trên một chủ đề cũ! Tôi sẽ xóa những bình luận trước đây của tôi, vì nó đã lỗi thời rồi :)
Erenor Paz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.