克服 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 訂單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!