[英]WooCommerce access orders that have products on sale
在 WooCommerce 中,我有一個循環遍歷所有訂單並獲取有優惠券折扣的訂單的函數:
$orders = wc_get_orders( array('numberposts' => -1) );
// Loop through each WC_Order Object
foreach( $orders as $order ){
if ( sizeof($order->get_used_coupons()) > 0 ) {
$order_data = $order->get_data(); // The Order data
$data = 'Order Number: #' . $order->id . '<br>' .'Order Status: '. $order->status . '<br>' . 'Order Creation Date: ' . $order_date_created = $order_data['date_created']->date('Y-m-d H:i:s') . '<br>' . 'Order Total: '. $order->total . '<br>' . 'Customer Username: ' . $order_billing_first_name = $order_data['billing']['first_name'] . '<br>' . 'Customer E-Mail: '. $order_billing_email = $order_data['billing']['email'] . '<br>' . 'Customer Phone: ' . $order_billing_phone = $order_data['billing']['phone'] . '<br>';
}
}
除了優惠券,是否有可能獲得所有銷售產品的訂單? 我怎么能做到這一點?
更新:以下內容將讓您獲得包含“特價”商品的 WooCommerce 訂單。
一個帶有自定義 SQL 查詢的函數,用於獲取帶有“在售”商品的訂單 ID:
// Get Orders Ids with "on sale" items
function wc_get_onsale_items_order_ids() {
global $wpdb;
// The paid order statuses
$statuses = implode( "','wc-", array_map( 'esc_sql', wc_get_is_paid_statuses() ) );
// The_query
return $wpdb->get_col("
SELECT DISTINCT o.ID
FROM {$wpdb->prefix}posts o
INNER JOIN {$wpdb->prefix}postmeta om
ON o.ID = om.post_id
INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
ON o.ID = oi.order_id
INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
ON oi.order_item_id = oim.order_item_id
WHERE o.post_type = 'shop_order'
AND o.post_status IN ('wc-$statuses')
AND oim.meta_key IN ('_product_id','_variation_id')
AND oim.meta_value IN (
SELECT p.ID
FROM {$wpdb->prefix}posts p
INNER JOIN {$wpdb->prefix}postmeta pm
ON p.ID = pm.post_id
WHERE p.post_type IN ('product','product_variation')
AND p.post_status = 'publish'
AND pm.meta_key = '_sale_price'
AND pm.meta_value != ''
AND pm.meta_value > 0
)
");
}
代碼位於活動子主題(或活動主題)的 function.php 文件中。 測試和工作。
代碼中的用法:
// Loop through each WC_Order Object
foreach( wc_get_onsale_items_order_ids() as $order_id ){
// Get The WC_Order Object
$order = wc_get_order( $order_id );
// The dormatted data
$data = 'Order Number: #' . $order->get_order_number() . '<br>' .
'Order Status: '. $order->get_status() . '<br>' .
'Order Creation Date: ' . $order->get_date_created()->date('Y-m-d H:i:s') . '<br>' .
'Order Total: '. $order->get_total() . '<br>' .
'Customer Username: ' . $order->get_billing_first_name() . '<br>' .
'Customer E-Mail: '. $order->get_billing_email() . '<br>' .
'Customer Phone: ' . $order->get_billing_phone();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.