programing

WooCommerce 주문변경현황 BACS처리

newsource 2023. 3. 26. 11:25

WooCommerce 주문변경현황 BACS처리

WooCommerce에서는 BACS(직접 은행 송금)와 함께 발주된 모든 주문은 로 설정됩니다.

이것을 자동으로 처리로 변경하는 방법은 무엇입니까?

나는 그것이 안에서 일하는 것을 원하지 않는다.

다음 코드를 사용하지만 작동하지 않습니다.

add_filter( 'woocommerce_payment_complete_order_status', 'rfvc_update_order_status', 10, 2 );

function rfvc_update_order_status( $order_status, $order_id ) {
    $order = new WC_Order( $order_id );
    if ( 'on-hold' == $order_status && 'on-hold' == $order->status ) {
        return 'processing';
    }
    return $order_status;
}

어떤 도움이라도 좋아요!

새로운 2020 업데이트

WooCommerce 버전 3.4는 보다 훨씬 더 나은 후크를 도입했습니다.woocommerce_thankyou또는woocommerce_thankyou_bacsBACS 결제방법의 기본 주문상태를 변경할 수 있습니다.

이 훅을 사용하면 다음과 같이 됩니다.

  • 필요한 코드를 명확하게 밝힙니다.
  • BACS 주문 시 고객에게 "보류" 알림을 피하십시오.

그 대신 다음을 사용합니다.

add_filter( 'woocommerce_bacs_process_payment_order_status','filter_bacs_process_payment_order_status_callback', 10, 2 );
function filter_bacs_process_payment_order_status_callback( $status, $order ) {
    return 'processing';
}

코드는 기능합니다.php 파일(또는 활성 테마)입니다(또는 활성 테마)을 입력합니다.테스트 및 동작.


원답:

갱신하다 (마지막에 woocommerce 3+ 버전 추가)

인 것 같다woocommerce_payment_complete_order_status액션 훅은 BACS 지불 방법에서는 트리거되지 않습니다.

스레드를 바탕으로 하면'woocommerce_thankyou'액션 후크는 다음 작업을 수행합니다.

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

    // Get an instance of the WC_Order object
    $order = new WC_Order( $order_id );
 
    if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status || 'pending' == $order->status) ) {
        $order->update_status('processing');
    } else {
        return;
    }
}

코드가 기능합니다.php 파일에는 액티브한 아이 테마(또는 활성 테마).테스트 및 동작합니다.


woocommerce 3+ 버전의 경우:

여기에서는 같은 컴포지트훅을 사용합니다.

add_action( 'woocommerce_thankyou_bacs', 'bacs_order_payment_processing_order_status', 10, 1 );
function bacs_order_payment_processing_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );
 
    if ( in_array( $order->get_status(), array('on-hold', 'pending') ) ) {
        $order->update_status('processing');
    } else {
        return;
    }
}

코드가 기능합니다.php 파일에는 액티브한 아이 테마(또는 활성 테마).테스트 및 동작합니다.

BACS '지급' 처리 시 상태를 설정할 수 있는 새로운 필터가 있습니다.

/**
 * Change the default status when BACS 'payment' is processed.
 * 
 * @see WC_Gateway_BACS::process_payment()
 * woocommerce/includes/gateways/bacs/class-wc-gateway-bacs.php:362
 * @since Mar 8, 2018
 * @link https://github.com/woocommerce/woocommerce/blob/750fda3b1b55c55645f626d3873d956282e3ac1b/includes/gateways/bacs/class-wc-gateway-bacs.php#L364
 * 
 * @filter woocommerce_bacs_process_payment_order_status
 * @priority 10
 * @args 2
 * 
 * @param string $status Status to filter. Default 'on-hold'.
 * @param WC_Order $order
 * @return string New status 'processing'.
 */
add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) {
    return 'processing';
}, 10, 2 );

코드를 다음과 같이 변경해 보십시오.

function rfvc_update_order_status( $order_status, $order_id ) {
    $order = new WC_Order( $order_id );
    if ( 'on-hold' == $order_status && 'on-hold' == $order->status ) {
        $order->update_status('processing', 'order_note');
    }
    return $order_status;
}

여기서의 주요 변경 사항은 다음과 같습니다.

$order->update_status('processing', 'order_note');

원하시면 주문서를 추가하실 수도 있습니다.

언급URL : https://stackoverflow.com/questions/36597663/woocommerce-change-order-status-bacs-processing