在 WooCommerce 中付款后立即更改订单状态 [英] Change order status just after payment in WooCommerce
问题描述
我需要在收到付款后自动更改订单状态为已完成,但前提是订单状态为处理中".我发现了那个片段,是什么让订单状态在每种情况下都完成,但我的付款插件在成功付款更改后返回数据并更改订单状态以进行处理".我想在成功后将其更改为已完成",如果状态不是正在处理",则不要更改它.我遇到的主要问题是我不知道如何获取收到的状态订单.
I need to change automatically an order status for completed after receiving payment, but only if the order status is "processing". I found that snippet, what makes orders status completed in every case, but my payments plugins after successful payment changes returns data and changes the order status for "processing". I would like to change it into "completed" after success and don't change it if the status isn't "processing". The main problem I met is I don't know how to get the received status order.
这是我的代码:
add_filter( 'woocommerce_thankyou', 'update_order_status', 10, 2 );
function update_order_status( $order_id ) {
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ('processing' == $order_status) {
$order->update_status( 'completed' );
}
//return $order_status;
}
<小时>
我已经知道了.这是对我有用的代码:
I figured it out already. Here's the code that works for me:
add_filter( 'woocommerce_thankyou', 'update_order_status', 10, 1 );
function update_order_status( $order_id ) {
if ( !$order_id ){
return;
}
$order = new WC_Order( $order_id );
if ( 'processing' == $order->status) {
$order->update_status( 'completed' );
}
return;
}
推荐答案
更新 2 - 2019 年:使用 WooCommerce:自动完成支付订单(更新线程)
Update 2 - 2019: Use WooCommerce: Auto complete paid orders (updated thread)
所以正确使用的钩子是 woocommerce_payment_complete_order_status
过滤器返回完整
So the right hook to use is woocommerce_payment_complete_order_status
filter returning complete
更新 1:与 WooCommerce 版本 3+ 的兼容性
我改了答案
基于:WooCommerce - 自动完成付费虚拟订单(取决于付款方式),您还可以在条件下处理所有付款方式:
Based on: WooCommerce - Auto Complete paid virtual Orders (depending on Payment methods), you will be able to handle also all payment methods in conditionals:
// => not a filter (an action hook)
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 = new WC_Order( $order_id );
// No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
if ( get_post_meta($order_id, '_payment_method', true) == 'bacs' || get_post_meta($order_id, '_payment_method', true) == 'cod' || get_post_meta($order_id, '_payment_method', true) == 'cheque' ) {
return;
}
// "completed" updated status for paid "processing" Orders (with all others payment methods)
elseif ( $order->has_status( 'processing' ) ) {
$order->update_status( 'completed' );
}
else {
return;
}
}
这篇关于在 WooCommerce 中付款后立即更改订单状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!