특정 쿠폰을 사용하는 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
테이블, 아래 및 아래.
먼저 주문 ID를 모두 받은 다음 원하는 합계 또는 세금 또는 할인을 받으려면 이 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
)
코드를 테스트하고 작동합니다.
도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/42769306/how-to-retrieve-a-list-of-woocommerce-orders-which-use-a-particular-coupon
'programing' 카테고리의 다른 글
moment.js를 사용하여 날짜를 "MM/dd/yyyyy" 문자열로 변환 (0) | 2023.09.20 |
---|---|
SELECT에 sql%rowcount를 사용할 수 있습니까? (0) | 2023.09.20 |
인코딩 / 디코딩.EXE를 베이스64로 (0) | 2023.09.20 |
C 프로그램을 최적화하기 위해 어떤 코딩 기법을 사용합니까? (0) | 2023.09.20 |
현재 선택한 항목을 보존하면서 HTML 선택 옵션을 값별로 정렬하는 가장 효율적인 방법은 무엇입니까? (0) | 2023.09.20 |