복붙노트

WooCommerce : 자동 완성 된 주문 (결제 수단에 따라 다름)

PHP

WooCommerce : 자동 완성 된 주문 (결제 수단에 따라 다름)

일반적으로 wooCommerce는 가상 제품 주문을 자동 완료해야합니다. 하지만 그렇지 않습니다. 그리고 이것은 실제 문제입니다. 심지어는 BUG도 마찬가지입니다.

그래서이 시점에서 somme 유용한 것들을 찾을 수 있습니다 (그러나 정말로 편리하지는 않습니다) :

* BACS는 직접 은행 이체 지불 방법입니다.

그리고 ...

내 질문:

포인트 1의 wooCommerce 스 니펫을 (기초로) 사용 :

woocommerce 지불 방법을 기반으로 조건부 코드를 구현하려면 어떻게해야합니까?

나는 지불 방법이 "BACS", "Pay on delivery"및 "Check"가 아닌 경우 스 니펫 코드 (가상 제품 관련 유료 주문의 상태를 "completed"로 업데이트)를 적용합니다.

나는 wooCommerce 메가 전문가 코더가 아니므로, 아직 woocommerce 주문에서 지불 방법을 타겟팅하는 방법을 찾지 못했습니다.

어떤 도움은 아주 좋을 것입니다.

감사.

해결법

  1. ==============================

    1.이 문제에 대한 해결책을 찾았습니다 (WC 3 이상에서 작동).

    이 문제에 대한 해결책을 찾았습니다 (WC 3 이상에서 작동).

    /**
     * AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE
     */
    add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
    function custom_woocommerce_auto_complete_paid_order( $order_id ) {
        if ( ! $order_id )
        return;
    
        $order = wc_get_order( $order_id );
    
        // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
        if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) {
            return;
        } 
        // "completed" updated status for paid Orders with all others payment methods
        else {
            $order->update_status( 'completed' );
        }
    }
    

    코드는 활성 자식 테마 (또는 활성 테마)의 function.php 파일에 있습니다.

    이 게시물의 도움으로 : 어떻게 ID로 WooCommerce 주문에 지불 방법을 확인하려면?

    이걸로 : get_post_meta ($ order_id, '_payment_method', true); 헬 게이트 워킹에서

    은행 송금, 대금 상환 및 수표 지불 방법은 무시되며 원래 주문 상태로 유지됩니다.

    WC 3.0 이상 (2017-06-10)과의 호환성을 위해 코드를 업데이트했습니다.

    add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
    function wc_auto_complete_paid_order( $order_id ) {
        if ( ! $order_id )
            return;
    
        // Get an instance of the WC_Product object
        $order = wc_get_order( $order_id );
    
        // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
        if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
            return;
        // Updated status to "completed" for paid Orders with all others payment methods
        } else {
            $order->update_status( 'completed' );
        }
    }
    

    코드는 활성 자식 테마 (또는 활성 테마)의 function.php 파일에 있습니다.

  2. from https://stackoverflow.com/questions/35686707/woocommerce-auto-complete-paid-orders-depending-on-payment-methods by cc-by-sa and MIT license