【问题标题】:How to automatically change woocommerce processing status to completed如何自动将 woocommerce 处理状态更改为已完成
【发布时间】:2020-02-19 21:23:15
【问题描述】:
如何将woocommerce 订单状态从处理中更改为已完成
?
我找到了sn-p,但是如果你去感谢页面,它只会改变状态,但是如果我的客户决定关闭paypal页面而不去感谢页面?
然后它仍在处理中,已经测试过了。我需要自动检测处理状态并将其更改为处理。
【问题讨论】:
标签:
php
wordpress
woocommerce
status
【解决方案1】:
这将检查订单何时更改状态。如果状态更改为处理中,则将状态设置为已完成。请注意,它确实会经过处理,因此用户可能会背靠背收到两封电子邮件。您可以在 WC 设置仪表板中禁用其中一封电子邮件。
function wc_status_change($order_id,$old_status,$new_status) {
$order = new WC_Order( $order_id );
if($order->status == 'processing'){
$order->update_status('completed');
}
}
【解决方案2】:
在您的情况下,您有两个选项,第一个可能无法使用,因为它与之前版本的 woocommerce 有关,但第二个应该可以使用
将代码添加到您的functions.php
1º
add_filter( 'woocommerce_payment_complete_order_status', 'update_order_status_woo', 10, 2 );
function update_order_status_woo( $order_status, $order_id ) {
$order = new WC_Order( $order_id );
if ( $order_status == 'processing' && ( 'on-hold' == $order->status || 'pending' == $order->status || 'failed' == $order->status ) ) {
return 'completed';
}
return $order_status;
}
2º
add_action('woocommerce_order_status_changed', 'auto_update_processing_to_complete');
function auto_update_processing_to_complete($order_id)
{
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
if ($order->data['status'] == 'processing') {
$order->update_status( 'completed' );
}
}