首頁 >後端開發 >php教程 >如何在 WooCommerce 中自動完成付費虛擬產品訂單?

如何在 WooCommerce 中自動完成付費虛擬產品訂單?

Susan Sarandon
Susan Sarandon原創
2024-12-09 18:25:11504瀏覽

How to Automate the Completion of Paid Virtual Product Orders in WooCommerce?

如何在WooCommerce 中自動完成付費虛擬產品訂單

當虛擬產品訂單標記為已付款時,通常應自動設定為「已完成”狀態。然而,WooCommerce 並不總是這樣做。要解決此問題,您可以根據所使用的 WooCommerce 付款方式實作自訂程式碼。

解決方案

以下程式碼片段過濾允許的付款訂單狀態,有效完成透過非排除付款方式支付的虛擬產品訂單

add_filter( 'woocommerce_payment_complete_order_status', 'wc_auto_complete_paid_order', 10, 3 );
function wc_auto_complete_paid_order( $status, $order_id, $order ) {
    return 'completed';
}

說明

  • 輕量有效:此過濾器僅在需要線上付款時觸發,避免不必要的條件。
  • 準確:防止多個客戶透過僅將訂單狀態設定為「已完成」一次來通知。

替代解決方案

  • 改進版本(WooCommerce 3 上面):
  • 改進版本(WooCommerce 3 和上面):
add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
        return;
    }
    $order->update_status( 'completed' );
}
改進版本(WooCommerce 3 上面):
  • 原答案(所有WooCommerce 版本):
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 );
function custom_woocommerce_auto_complete_paid_order( $order_id ) {
    $order = wc_get_order( $order_id );
    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;
    } elseif( $order->get_status() === 'processing' ) {
        $order->update_status( 'completed' );
    }
}

注意:

將程式碼片段放在活動子主題的functions.php檔案中或主題。

以上是如何在 WooCommerce 中自動完成付費虛擬產品訂單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn