2017-02-18 20 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 является действующим почтовым идентификатором, запрос ничего не возвращает.

Любая идея, почему, улей ума?

В качестве альтернативы существует способ создания Woocommerce простой страницы с макетом;

Order ID: 836 
Order Status: .... 

Я предположил, WP_Query будет очевидным способом, но она появляется, как получить данные заказа WooCommerce совсем не просто.

+0

В качестве фона у меня есть база данных Filemaker, которая анализирует электронные письма из торгового решения Romancart, я мог бы. конечно, разобрать электронную почту заказа из Woocommerce, но я думал, что буду немного умнее и передам данные через веб-страницу. ESS - это, конечно, лучшее решение, но оно также очень интенсивно программируется. –

+0

Это может помочь http://stackoverflow.com/a/28847572/1182891 –

ответ

4

Update 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']; 
    // .../... 
} 

Update 1

Вы должны попробовать это, как с array_keys(wc_get_order_statuses() вы получите все статусы заказов и 'numberposts' => -1, всех существующих порядков.

Вот альтернативный способ (без WP_Query или вы можете использовать thoses арг в массиве 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 выполнила большую часть работы за вас. Есть другие pratfalls по пути; 1. Сообщение защищено, а примечания к заказу находятся в выдержке, поэтому их невозможно отобразить (я мог бы переместить их в мета, но ...) 2. Элементы заказа находятся в комментариях и должны быть закодированы, а затем проанализированы для создания значимых вывода, поэтому я мог бы также проанализировать электронную почту напрямую.

+0

Стоит отметить, что перемещение данных Woocommerce в Filemaker - это то, что люди могут захотеть сделать, что тот факт, что один заказ Woocommerce является путаницей взаимосвязанных записей в таблице, означает, что любое решение будет сложным и что электронная почта заказа может быть лучшее упорядоченное резюме полного набора данных из заказа, который есть. –

+0

Ваш вопрос был очень неясным ... Я не понимал, что вы пытались назвать один заказ. вам лучше использовать непосредственно этот '$ order = wc_get_order ($ order_id);' ... нет необходимости в запросе ... тогда, если вы 'print_r ($ order)' вы увидите, что можете получить бесконечный ... Я обновил свой ответ 2 раза , – LoicTheAztec