woocommerce wp_query通过ID获取订单



我正在尝试产生订单数据的平淡输出。第一步是WP_QUERY(也许),所以我写了此代码;

$args = array (
    'post_type'  =>'shop_order',
    'posts_per_page' => -1,
    'post_status' => 'any',
    //'p' => $post_id,
);    
$order_query = new WP_Query( $args );
while ( $order_query->have_posts() ) :
  $order_query->the_post(); 
  echo the_ID();
  echo ' : '; 
  the_title();
  echo '<br/><br/>';
endwhile;

它义务产品的所有订单列表,如果我设置了 'p' => $post_id,其中 $post_id是有效的帖子ID,则查询无需返回。

有什么想法,为什么,蜂巢?

另外,还有一种woocommerce的方式,可以生产带有;

的布局的普通页面
Order ID: 836
Order Status: ....

我以为wp_query将是显而易见的方法,但看起来就像获取WooCommerce订单数据并非直接。

更新2

要获取一个订单的订单数据,您不需要WP_query。您可以直接使用:

$order = wc_get_order( $order_id );
$order->id; // order ID
$order->post_title; // order Title
$order->post_status; // order Status
// getting order items
foreach($order->get_items() as $item_id => $item_values){
    // Getting the product ID
    $product_id = $item_values['product_id'];
    // .../...
}

更新1

您应该尝试一下,就像 array_keys( wc_get_order_statuses() 一样,您将获得所有订单状态,并使用 'numberposts' => -1, 所有现有订单。

这是一种替代方法(没有wp_query,或者您可以在WP_QUERY数组中使用Thoses Arg):

$customer_orders = get_posts( array( 
    'numberposts'    => -1,
    'post_type' => 'shop_order',
    'post_status'    => array_keys( wc_get_order_statuses() ) 
) );
// Going through each current customer orders
foreach ( $customer_orders as $customer_order ) {
    // Getting Order ID, title and status
    $order_id = $customer_order->ID;
    $order_title = $customer_order->post_title;
    $order_status = $customer_order->post_status;
    // Displaying Order ID, title and status
    echo '<p>Order ID : ' . $order_id . '<br>';
    echo 'Order title: ' . $order_title . '<br>';
    echo 'Order status: ' . $order_status . '<br>';
    // Getting an instance of the order object
    $order = wc_get_order( $order_id );
    // Going through each current customer order items
    foreach($order->get_items() as $item_id => $item_values){
        // Getting the product ID
        $product_id = $item_values['product_id'];
        // displaying the product ID
        echo '<p>Product ID: '.$product_id.'</p>';
    }
}

这个问题的严格答案是将 'p'=>$post_id'更改为 'post__in' => array($post_id)

...但是,真正的答案是,如果有人踩这条路,解析电子邮件要容易得多,WooCommerce为您完成了大部分工作。沿途还有其他prat fall。1.帖子受到保护,订单注释在摘录中,因此无法显示(我可以将其移至元数据,但...)2。订单项目在注释中,必须循环,然后解析以产生有意义的输出,所以我不妨将电子邮件直接解析。

相关内容

  • 没有找到相关文章

最新更新