2017-11-24 12 views
1

私が使用する支払いゲートウェイの1つは、トランザクションが失敗するかユーザーがトランザクションをキャンセルするたびに、注文ステータスを「処理中」から「失敗」に変更します。顧客が後で失敗した注文の支払いを試みると、支払いゲートウェイは「Duplicate Order ID」というエラーを投げます。したがって、この問題を回避するために、失敗した注文が発生したときにその注文を自動的に削除する必要があります。WooCommerce失敗した注文の自動削除

similar question on this siteがありますが、そこに記載されている解決策は機能していないようです。

コードは次のように表示されます。

<?php 
function update_order_status($order_id) { 
$order = new WC_Order($order_id); 
$order_status = $order->get_status(); 

if ('cancelled' == $order_status || 'failed' == $order_status || 'pending' == $order_status) {  
     wp_delete_post($order_id,true);  
    }  
} 

答えて

0

あなたは、注文ステータスの変更トリガされwoocommerce_order_status_changedアクションフックに引っかけ、このカスタム関数を、使用することができます。

あなたは時に「キャンセル」にステータスの変更この機能は、(この定義された決済ゲートウェイ用)注文状況の変化を検出します...関連決済ゲートウェイ(ゲートウェイID)機能でセットに

が必要になりますし、 「処理中」状態から「失敗」状態に変更されます。

この特定の支払いゲートウェイでは、この特定の注文ステータスが変更されます。現在の注文に関連するすべてのデータは、データベースから完全に消去されます。

Woocommerceでは、支払いゲートウェイに送信されたすべての注文は「保留中」のステータスから開始されるため、使用しません。

コード:

add_action('woocommerce_order_status_changed', 'auto_destroy_failed_orders', 10, 4); 
function auto_destroy_failed_orders($order_id, $old_status, $new_status, $order){ 
    // HERE set your payment Gateway ID (look in WC settings > checkout to get the Gateway ID) 
    $gateway_id = 'paypal'; 

    if ($order->get_payment_method() != $gateway_id) return; // Only for this payment gateway 

    if (($old_status == 'processing' && $new_status == 'failed') || $new_status == 'cancelled') { 
     wp_delete_post($order_id, true); 
    } 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

テスト済みで動作します。

不便:注文は編集次のバックエンドでの注文状況の変化に破壊され得るとき、あなたはリストページをポストするために、代わりにそれはもう存在しないよう注文編集ページにリダイレクトされるようにリダイレクトされます...私はwp_schedule_single_event()を使用して遅れをとろうとしましたが、私はそれと一緒に働くことができません...

+0

こんにちはLoicTheAztec、時間と労力のためにありがとう。私はlocalserverでそれをテストしましたが、コードは私のケースでは機能していないようです(私は上記のpaytmで 'paypal'を置き換えました)。問題の支払いゲートウェイは、Paytm ** [Plugin link](https://github.com/Paytm-Payments/Paytm_Woocommerce_v2.x_Kit/tree/master/Wordpress_v4.x_compatible)**で、ゲートウェイIDは「paytm」です。製品タイプはVirtual + Downloadableです。私はまた、Woocommerceプラグインと一緒にWoocommerceサブスクリプションを使用します。 –

+0

@ManjunathPmfIasコードは私のテストサーバー上で任意の注文種類の決済ゲートウェイのために完璧に動作します...だから私は何を変えるべきかわからない... – LoicTheAztec

+0

localserverでは動作しませんでしたが、それが働いていたライブサーバー。実際には、それはより多くの問題を解決します。私は単にその考えを落とした。御時間ありがとうございます。 –

関連する問題