2016-08-03 9 views
2

woocommerceで実行されている店舗のオンライン支払いを受け入れるための支払いゲートウェイを統合しました。すべて正常に動作しますが、私は、woocommerceがデフォルトですべてのオンライン支払い注文の注文ステータスをwc-processingに変更していることに気付きました。WooCommerceの注文状況がお支払いゲートウェイから変更されました

私の店舗の機能ごとに、オンライン支払いの注文はすべて最初にwc-on-holdステータスになります。

注文状況をプログラムでwc-processingに変更する方法はありますか?

答えて

2

はい方法はありますが、支払いプラグインを変更するか、独自のコードを追加する必要があります。read this支払いの仕組みを理解することができます。ここでwoocommerce_payment_complete_order_status

+0

あなたは '$ order-> payment_complete()'が自分の支払いプラグインの注文ステータスを '処理中 'に変更しています。代わりに私自身の関数を配置して、あなたに知らせるようにします。 – krishna89

+0

'$ order-> payment_complete()'の代わりに次のコードを追加しました。 '$ order-> update_status( '保留')です。 add_post_meta($ order-> id、 '_paid_date'、current_time( 'mysql')、true); update_post_meta($ order-> id、 '_transaction_id'、$ txnid); $ order-> reduce_order_stock(); ' – krishna89

2

それがコードスニペット基づいています。このフィルタはhere is the description of that method

使用今

、woocommerce利用$order->payment_complete()方法あなたが状況を修正するために、独自の機能をフックする必要がありますので、注文完了を処理するため、このthreadの上に私たちは、'on-hold''processing'注文状況を変換する、私たちの機能をフックするためにここにwoocommerce_thankyou(つまりは、支払いが行われた直後に解雇された)を使用します。

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

    global $woocommerce; 
    $order = new WC_Order($order_id); 

    // 'processing' orders status are converted to 'on-hold'. 
    if (is_object($order) && $order->has_status('processing') { 
     $order->update_status('on-hold'); 
    } 

    return; 
} 

あなたはまた、ターゲットにすることができ、あなたの条件にたとえば、ここでは3つの支払いゲートウェイを迂回し、特定の支払いゲートウェイをターゲットにします。"your_payment_gateway"スラッグ

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

    global $woocommerce; 
    $order = new WC_Order($order_id); 

    // Bypass orders with Bank wire, Cash on delivery and Cheque payment methods. 
    if ((get_post_meta($order->id, '_payment_method', true) == 'bacs') || (get_post_meta($order->id, '_payment_method', true) == 'cod') || (get_post_meta($order->id, '_payment_method', true) == 'cheque')) { 
     return; 
    } 

    // Target your "your_payment_gateway_slug" with this conditional 
    if (is_object($order) && get_post_meta($order->id, '_payment_method', true) == 'your_payment_gateway_slug' && $order->has_status('processing')) { 
     $order->update_status('on-hold'); 
    } 

    return; 
} 

このコードスニペットは、アクティブな子テーマまたはテーマのfunction.phpファイルになります。

あなたが簡単にあなたが欲しいものを行うことができます、と有料受注のための正しいフックがwoocommerce_thankyou

参考資料です:

+0

ありがとうございますが、あなたの解決策では、すでにゲートウェイから'処理中 'としてマークされている注文は '保留中'になります。私の問題は、私は、電子メールアラートフローが、保留状態がゲートウェイ処理の最初のステータスでなければならない注文ステータスに接続していることです。 – krishna89

関連する問題