처리 상태가 될 때 WooCommerce 주문을 자동으로 완료하는 방법
게시 됨: 2019-04-06모든 전자 상거래 사이트는 평균 트래픽이 많은 전자 상거래 웹 사이트가 하루에 받는 주문 수를 고려할 때 관리자에게 상당히 힘든 작업이 될 수 있는 주문을 추적하고 관리해야 합니다. WooCommerce의 경우 Checkout 프로세스가 완료되는 즉시 주문이 생성됩니다(아래 WooCommerce 주문 상태 흐름 확인).
주문이 지불-배송 체인의 어디에 있는지에 따라 상태가 지정됩니다. 이러한 상태는 주문 위치에 따라 WooCommerce, 지불 게이트웨이 및 상점 소유자/관리자에 의해 설정 및/또는 변경됩니다.
WooCommerce의 주문 흐름을 살펴보기 전에 초보자를 위해 WooCommerce의 주문 상태를 정의해 보겠습니다.
WooCommerce의 주문 상태는 무엇입니까?
주문 상태는 고객이 주문한 현재 상태를 나타냅니다 . 우커머스의 주문 상태는 상품/서비스에 문제가 있는 경우, 점주가 고객에게 환불하기로 동의한 경우 배송 단계 또는 환불로 처리됨에 따라 변경됩니다. 예를 들어 고객이 특정 제품을 주문하면 즉시 다음 주문 상태가 "결제 보류"로 설정됩니다. 보류 중인 결제는 Woocommerce에서 기본적으로 설정됩니다.
이제 이해를 돕기 위해 순서도를 살펴보겠습니다.
Woocommerce 주문 현황 흐름도

그림과 같이 주문에 대한 결제가 성공적으로 완료된 후 상점 소유자가 수동으로 "Completed"로 변경할 때까지 해당 상태는 "Processing"으로 설정됩니다. 이것은 특히 판매량이 많은 경우 상점 소유자 또는 관리자에게 오버헤드 작업입니다. 이 프로세스를 효율적으로 만드는 한 가지 방법은 WooCommerce 주문이 처리 중 상태가 되면 자동으로 완료하는 것입니다. 코드 스니펫을 사용하여 이를 수행하는 방법을 살펴보겠습니다.
WooCommerce의 전체 주문 상태 목록
- 결제 보류: 주문이 완료되었지만 결제가 이루어지지 않은 경우 기본적으로 표시됩니다.
- 실패: 결제가 완료되지 않아 거부되었음을 나타냅니다.
- 처리 중: 결제가 완료되어 상점 소유자가 수령했으며 이제 배송 및 배송을 처리할 수 있음을 나타냅니다.
- 완료됨: 이것은 모든 것이 잘 진행되었으며 이제 주문이 이행 및 완료되었음을 나타냅니다.
- 보류 중 : 주문이 점주의 확인이 필요한 상태를 나타냅니다.
- 취소됨 : 주문 상태가 '취소됨'인 경우 추가 조치가 필요하지 않습니다. 취소는 어느 시점에서 관리자 또는 고객이 할 수 있습니다.
- 환불됨: 주문이 환불되었으며 추가 조치가 필요하지 않습니다.
이제 주문 상태와 기능을 더 잘 이해했으므로 업데이트하는 것이 좋은 이유를 살펴보겠습니다.
결제 수단에 따라 WooCommerce 주문 상태를 자동으로 완료로 설정
대부분의 경우 결제가 성공적으로 완료된 후에만 이 작업을 수행해야 하며, 이는 사용자가 배달 시 착불 옵션을 선택하지 않은 경우에만 가능합니다. 아래 코드를 하위 테마의 functions.php 파일에 삽입하면 결제가 성공적으로 완료 될 때마다 주문 상태가 자동으로 완료됨으로 설정됩니다. 따라서 사용자가 Cash-on-Delivery 옵션을 선택한 경우를 제외한 모든 경우에 주문 상태가 자동으로 완료됨으로 변경됩니다.
add_action('우커머스_주문_상태_변경', 'ts_auto_complete_by_payment_method'); 함수 ts_auto_complete_by_payment_method($order_id) { 만약 ( ! $order_id ) { 반품; } 글로벌 $product; $order = wc_get_order( $order_id ); if ($주문->데이터['상태'] == '처리중') { $payment_method=$order->get_payment_method(); if ($payment_method!="cod") { $order->update_status( '완료' ); } } }
여기서는 주문 상태가 변경될 때 woocommerce_order_status_changed 훅을 사용하여 함수를 호출합니다. 주문 상태가 처리중인지 확인 후 결제수단이 착불결제가 아닌 경우에만 주문상태가 완료 됨으로 변경됩니다. WooCommerce에는 네 가지 기본 결제 방법이 있습니다. 직접 은행 송금(bacs), 수표 지불(수표), 배달 대금 상환(cod) 및 PayPal(페이팔). 조건을 지정하는 지불 방법에 따라 "bacs", "cheque", "cod", "paypal"과 같은 적절한 ID 를 사용해야 합니다.

가상 제품에 대해 WooCommerce 주문 상태를 완료됨으로 자동 설정
주문 상태가 자동으로 완료되기를 원하는 또 다른 경우는 주문에 포함된 제품이 가상 제품인 경우입니다. 가상 제품은 유형이 없거나 다운로드할 수 있는 제품입니다. 이것의 예로는 스토어 멤버십 구독 또는 구독을 구매한 사람들에게 할인을 제공하는 쿠폰이 있습니다.

스토어 멤버십 구독은 유형이 아닌 만료 날짜가 있을 수 있습니다. 소프트웨어나 전자 영화 티켓과 같은 다운로드 가능한 제품도 오프라인 존재나 형태가 없기 때문에 가상 제품입니다. 대부분의 가상 제품에는 "현금 배달" 옵션이 없습니다. 결제는 그 자리에서 이루어지므로 사용된 결제 수단을 확인하는 조건을 포함하지 않고 주문에 있는 모든 상품이 가상 상품인지 확인하는 조건만 추가하는 것이 안전합니다.
add_action('우커머스_주문_상태_변경', 'ts_auto_complete_virtual'); 함수 ts_auto_complete_virtual($order_id) { 만약 ( ! $order_id ) { 반품; } 글로벌 $product; $order = wc_get_order( $order_id ); if ($주문->데이터['상태'] == '처리중') { $virtual_order = null; if ( count( $order->get_items() ) > 0 ) { foreach( $order->get_items() as $item ) { if ( 'line_item' == $item['유형'] ) { $_product = $order->get_product_from_item( $item ); if ( ! $_product->is_virtual() ) { // 하나의 비가상 제품을 찾으면 루프에서 벗어납니다. $virtual_order = 거짓; 부서지다; } 또 다른 { $virtual_order = 사실; } } } } // 모두 가상 제품인 경우 완료로 표시 if ( $virtual_order ) { $order->update_status( '완료' ); } } }
여기에서 동일한 후크를 사용하여 ts_auto_complete_virtual 함수를 호출합니다. 주문 처리 상태인지 확인 후, 가상 상품인지 확인하기 위해 주문의 각 항목을 살펴봐야 합니다.
결론
일반적인 Woocommerce 주문에는 제품, 배송, 수수료 등과 같은 많은 항목이 관련되어 있습니다. 여기서 line_item 은 제품을 나타냅니다. 제품만 하나씩 가져와서 가상인지 확인하면 됩니다. 하나의 항목이라도 가상 상품이 아닌 경우 주문 상태가 완료로 표시되지 않습니다.
그러나 요구 사항에 따라 이 게시물의 첫 번째 코드 조각을 사용하여 주문 상태를 완료됨으로 표시하는 조건을 더 추가할 수 있습니다. 예를 들어, 가상이 아닌 제품에 대해서도 주문 상태를 완료로 표시하려면(해당 제품에 대한 결제가 완료된 경우) 가상 제품인지 확인한 후 결제 수단에 수표를 추가하면 됩니다. 제품. 그러나 이 코드 조각을 통해 주문의 모든 제품이 가상 제품인 경우에만 주문 상태가 완료 됨으로 설정됩니다.