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

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

Susan Sarandon
發布: 2024-12-09 18:25:11
原創
551 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板