programing

처리에서 보류로 주문이 작성될 때 WooCommerce 주문 상태 설정

bestprogram 2023. 3. 8. 21:52

처리에서 보류로 주문이 작성될 때 WooCommerce 주문 상태 설정

woocommerce 주문이 작성되면 주문 상태는 "processing"이 됩니다.기본 주문 상태를 "pending"으로 변경해야 합니다.

어떻게 하면 좋을까요?

기본 주문 상태는 결제 방법 또는 결제 게이트웨이에 따라 설정됩니다.

이 커스텀 후크 기능을 사용하려고 해도 동작하지 않습니다(이 후크는 지불 방법이나 지불 게이트웨이보다 먼저 기동하기 때문에).

add_action( 'woocommerce_checkout_order_processed', 'changing_order_status_before_payment', 10, 3 );
function changing_order_status_before_payment( $order_id, $posted_data, $order ){
    $order->update_status( 'pending' );
}

각 지불 수단(및 지불 게이트웨이)이 주문 상태를 설정하고 있는 것 같습니다(결제 게이트웨이의 트랜잭션 응답에 따라 다름).

배달 시 현금 지급 방법의 경우 전용 필터 후크를 사용하여 조정할 수 있습니다. 다음을 참조하십시오.
Woocommerce에서 배송 시 현금 지급 기본 주문 상태를 "처리 중"이 아닌 "보류 중"으로 변경

대신 후크를 사용하여 주문 상태를 업데이트할 수 있습니다.

add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
function woocommerce_thankyou_change_order_status( $order_id ){
    if( ! $order_id ) return;

    $order = wc_get_order( $order_id );

    if( $order->get_status() == 'processing' )
        $order->update_status( 'pending' );
}

코드가 기능합니다.php 파일 또는 임의의 플러그인 파일에 있는 활성 자식 테마(또는 테마)입니다.

테스트 완료 및 동작

주의: 후크woocommerce_thankyou주문 접수 페이지가 로드될 때마다 부팅되므로 주의해서 사용해야 합니다.
이제 위의 함수는 처음 주문 상태만 업데이트합니다.고객이 페이지를 새로고침 할 경우,IF스테이트먼트가 일치하지 않게 되어, 그 외의 일은 발생하지 않게 됩니다.


관련 스레드:WooCommerce: 결제된 주문 자동 완료(결제 방법에 따라 다름)

요즘, 당신이 적절하게 사용하는 결제 게이트웨이가 다음을 사용하여 주문 상태를 설정한다면,WC_Order->payment_complete(), 를 사용할 수 있습니다.woocommerce_payment_complete_order_status필터링을 실시합니다.

이것은 사용하는 것보다 낫다.woocommerce_thankyou훅은 이미 설정한 후에 적용하는 것이 아니라 바로 주문 상태를 설정하기 때문입니다.

function h9dx3_override_order_status($status, $order_id, $order) {
  if ($status === 'processing') {
    $status = 'pending';
  }

  return $status;
}
add_filter('woocommerce_payment_complete_order_status', 'h9dx3_override_order_status', 10, 3);

다시 말씀드리지만, 이것은 지불 게이트웨이가 적절한 값을 사용하는 경우에만 작동합니다.payment_complete상태를 직접 설정하는 대신 래퍼 메서드를 사용합니다.set_status게이트웨이 코드에서 'payment_complete'와 'set_status'를 검색하면 어떤 기능을 하는지 알 수 있습니다.

모든 사용자를 위한 플러그인을 개발하면 더 잘 사용할 수 있습니다.woocommerce_thankyou또는 복합적인 접근방식을 사용할 수도 있습니다.woocommerce_thankyou주문 상태가 업데이트되지 않은 경우 폴백으로 간주됩니다.

훅 woocommce_thanking은 주문 대금을 지불하고 브라우저를 닫거나 다른 곳으로 이동할 수 있기 때문에 "Return to Merchant"(페이팔을 통해 결제 후 표시됨)를 클릭하지 않고 감사 페이지로 이동할 수 없습니다.그러면 절대 코드가 실행되지 않을 거야

// Rename order status 'Processing' to 'Order Completed' in admin main view - different hook, different value than the other places
add_filter( 'wc_order_statuses', 'wc_renaming_order_status' );
function wc_renaming_order_status( $order_statuses ) {
    foreach ( $order_statuses as $key => $status ) {
        if ( 'wc-processing' === $key ) 
            $order_statuses['wc-processing'] = _x( 'Order Completed', 'Order status', 'woocommerce' );
    }
    return $order_statuses;
}

언급URL : https://stackoverflow.com/questions/45985488/set-woocommerce-order-status-when-order-is-created-from-processing-to-pending