2017-02-18 117 views
2

我正在尝试生成订单数据的纯输出。第一步是WP_QUERY(也许),所以我写这个代码;Woocommerce wp_query通过ID获取订单

$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的订单数据是非常简单的。

+0

作为背景,我有一个从Romancart购物解决方案,我可以解析封电子邮件的Filemaker数据库。当然,解析来自Woocommerce的订单电子邮件,但我想我会有点聪明,并通过网页传递数据。 ESS当然是最好的解决方案,但它也是编程密集型的。 –

+0

这可能有助于http://stackoverflow.com/a/28847572/1182891 –

回答

4

更新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阵列中使用放入系统参数):

$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>'; 
    } 
} 
+0

'“post_status” =>'any''的伎俩,返回所有的帖子不是一个问题。返回一篇文章是我的目标,请参阅上面的答案。不过谢谢你花时间回答。 –

0

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

...但真正的答案是,任何人都应该走这条道路,解析电子邮件是非常容易的,woocommerce已经为你完成了大部分工作。沿途还有其他一些事物; 1.帖子受到保护,订单注释在摘录中,因此无法显示(我可以将它们移动到meta,但是...)2.订单项在注释中,必须循环,然后解析以生成有意义的输出,所以我不妨直接解析电子邮件。

+0

值得一提的,因为移动Woocommerce数据的Filemaker是一个东西的人可能想要做的,是一个事实,即一个Woocommerce顺序是相互关联的表项的纠结是指任何解决方案将是复杂的,而且订单电子邮件可能来自订单的完整数据集的最佳订购汇总。 –

+0

你的问题很不清楚......我不明白你试图打一个订单。你应该直接使用这个'$ order = wc_get_order($ order_id);'...不需要查询...然后如果你使用'print_r($ order)',你会看到你可以得到永恒...我已经更新了我的答案2次。 – LoicTheAztec

相关问题