我想将成功付款的订单自动标记为“已完成”状态。我在Stack和Google上进行了大量搜索,找到了以下答案代码:
WooCommerce: Auto complete paid Orders (depending on Payment methods)
但是问题在于代码将所有下达的订单标记为“已完成”状态,而不取决于订单是否成功下达。
我需要更改代码中的哪些内容以将仅已付款的订单自动标记为“已完成”状态?
答案 0 :(得分:2)
新的增强和简化代码版本 替换(2019年3月):
请参阅:WooCommerce: Auto complete paid orders
原始答案:
对于Paypal和其他第三方网关,要定位的“已付费”订单状态为“正在处理” (和“已完成”),因此您可以轻松地将代码更改为:
add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
if ( ! $order_id )
return;
// Get an instance of the WC_Product object
$order = wc_get_order( $order_id );
// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
return;
// Updated status to "completed" for paid Orders with all others payment methods
} elseif ( in_array( $order->get_status(), array('on-hold', 'processing') ) ) {
$order->update_status( 'completed' );
}
}
代码进入活动子主题(或活动主题)的function.php文件中。经过测试并可以正常工作。
这样,您将避免“失败”,“取消”或“待处理”订单。