克服 WooCommerce 訂單自動完成的限制
通常,WooCommerce 會自動完成虛擬產品的訂單。但是,對於「銀行電匯」、「貨到付款」和「支票」等付款方式,此功能可能無法使用。要解決此問題並根據付款方式有條件地應用訂單自動完成,可以實施以下解決方案:
使用woocommerce_ payment_complete_order_status 過濾器掛鉤
此過濾器掛鉤在以下情況下觸發結帳時需要付款,並且適用於所有付款方式。透過修改允許的付款訂單狀態,您可以實現條件自動完成:
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_thankyou Action Hook
對於 WooCommerce 版本 3及更高版本,以下程式碼可以是使用:
add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 ); function wc_auto_complete_paid_order( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) { return; } else { $order->update_status( 'completed' ); } }
原始解決方案
對於所有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 ); 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' ); } }對於所有WooCommerce 版本,可以使用以下程式碼:這些解決方案提供條件根據指定的付款方式自動完成已付款訂單的訂單,確保接受多種付款方式的WooCommerce商店高效、準確的訂單處理選項。
以上是如何針對特定付款方式自動完成 WooCommerce 訂單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!