按日期和状态获取订单


Get orders by date and status woocommerce

我需要在woocommerce中获取订单列表,通过开始日期,最终日期和状态。

我尝试使用迈克·乔利(Mike Jolley)描述的一些技术,并与之混合。但我没有成功。这将返回所有订单。我使用的是 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;
}

您可以使用wc_get_orders

$initial_date = yyyy-mm-dd;
$final_date = yyyy-mm-dd;
$orders = wc_get_orders(array(
    'limit'=>-1,
    'type'=> 'shop_order',
    'status'=> array( 'wc-completed','wc-refunded' ),
    'date_created'=> $initial_date .'...'. $final_date 
    )
);

像这样使用自定义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);

如果要使用时间戳(日期和时间):

$timestamp_start = '2022-04-07 20:00:00.000'; // example
$timestamp_end   = '2022-04-21 20:00:01.000'; // example
'date_created' => strtotime($timestamp_start ) .'...'. strtotime($timestamp_end)