2015-01-15 58 views
1

我需要獲取woocommerce中通過開始日期,最終日期和狀態的訂單列表。按日期和狀態獲取訂單woocommerce

我嘗試使用一些技術,如Mike Jolley所述,我與this混合。但我沒有成功。這將返回所有訂單。我正在使用woocommerce版本2.2.10。

感謝您的幫助。

我的代碼:

public function get_orders(){ 
     global $json_api; 
     $initial_date = $json_api->query->para1; 
     $final_date = $json_api->query->para2; 
     $order_id = $json_api->query->para3; 
     $status_order = $json_api->query->para4; 

     define('GET_ORDERS_FILTER_DATE_FROM', $initial_date); 
     define('GET_ORDERS_FILTER_DATE_TO', $final_date); 
     add_filter('posts_where', array(__CLASS__, 'get_orders_where_dates_between')); 
     $orders = get_posts(array(
      'post_type' => 'shop_order', 
      'orderby' => 'post_date', 
      'order'  => 'DESC', 
      'post_status' => array_keys($status_order) 
     )); 
     remove_filter('posts_where', 'order_page_get_orders_where_dates_between'); 

     return $orders; 
} 

function get_orders_where_dates_between($where){ 
     global $wpdb; 
     if(! defined('GET_ORDERS_FILTER_DATE_FROM') || ! defined('PARCELWARE_GET_ORDERS_FILTER_DATE_TO')) 
      return $where; 

     $where .= $wpdb->prepare(" AND post_date >= '%s' ", GET_ORDERS_FILTER_DATE_FROM); 
     $where .= $wpdb->prepare(" AND post_date <= '%s' ", GET_ORDERS_FILTER_DATE_TO); 

     return $where; 
} 

回答

5

如何使用自wpdb這樣的查詢如何?

global $wpdb; 

$date_from = '2015-11-20'; 
$date_to = '2015-12-20'; 
$post_status = implode("','", array('wc-processing', 'wc-completed')); 

$result = $wpdb->get_results("SELECT * FROM $wpdb->posts 
      WHERE post_type = 'shop_order' 
      AND post_status IN ('{$post_status}') 
      AND post_date BETWEEN '{$date_from} 00:00:00' AND '{$date_to} 23:59:59' 
     "); 

echo "<pre>"; 
print_r($result);