如何检索使用特定优惠券的WooCommerce订单列表?



我正在尝试编写一个函数,该函数检索使用指定优惠券代码且位于指定日期范围内的WooCommerce订单列表,然后将应用于这些订单的总折扣求和。

经过一番谷歌搜索后,我觉得我应该使用类似的东西

$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key'    => ???,
'meta_value'  => $CouponToSearchFor,
'post_type'   => wc_get_order_types(),
'post_status' => array_keys( wc_get_order_statuses() ),
) ); 

我试过:

'meta_key' => 'coupon'
'meta_key' => 'shop_coupon'
'meta_key' => '_coupon'

但这些都不起作用。我怎样才能知道哪些meta_key/meta_value条款能满足我的需求?

此外,我认为meta_query可用于执行日期过滤作为此get_posts()查询的一部分,正确吗?

您的代码不起作用,因为默认情况下WooCommerce不存储 在表格中使用了wp_postmeta优惠券代码。它存储在wp_woocommerce_order_items表,order_item_type => couponorder_item_name => YOUR_CODE下。

您必须首先获取所有订单ID,然后必须循环它以获得所需的总额,或税费或折扣。

这是代码:

function wh_getOrderbyCouponCode($coupon_code, $start_date, $end_date) {
global $wpdb;
$return_array = [];
$total_discount = 0;
$query = "SELECT
p.ID AS order_id
FROM
{$wpdb->prefix}posts AS p
INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
WHERE
p.post_type = 'shop_order' AND
p.post_status IN ('" . implode("','", array_keys(wc_get_order_statuses())) . "') AND
woi.order_item_type = 'coupon' AND
woi.order_item_name = '" . $coupon_code . "' AND
DATE(p.post_date) BETWEEN '" . $start_date . "' AND '" . $end_date . "';";
$orders = $wpdb->get_results($query);
if (!empty($orders)) {
$dp = ( isset($filter['dp']) ? intval($filter['dp']) : 2 );
//looping throught all the order_id
foreach ($orders as $key => $order) {
$order_id = $order->order_id;
//getting order object
$objOrder = wc_get_order($order_id);
$return_array[$key]['order_id'] = $order_id;
$return_array[$key]['total'] = wc_format_decimal($objOrder->get_total(), $dp);
$return_array[$key]['total_discount'] = wc_format_decimal($objOrder->get_total_discount(), $dp);
$total_discount += $return_array[$key]['total_discount'];
}
//        echo '<pre>';
//        print_r($return_array);
}
$return_array['full_discount'] = $total_discount;
return $return_array;
}

代码进入函数.php活动子主题(或主题)的文件。或者在任何插件 php 文件中。

用法

$orders = wh_getOrderbyCouponCode('my_code', '2016-09-17', '2016-10-07');
echo 'Total Discount : ' . $orders['full_discount'];
//print_r($orders);

请注意:

所有日期均为YYYY-MM-DD格式。
print_r(array_keys(wc_get_order_statuses()));将输出如下内容:

Array
(
[0] => wc-pending
[1] => wc-processing
[4] => wc-on-hold
[5] => wc-completed
[6] => wc-cancelled
[7] => wc-refunded
[8] => wc-failed
)

代码经过测试并正常工作。

希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新