Nac*_*khi 3 php wordpress orders woocommerce hook-woocommerce
我在 WooCommerce 上使用这个来自这个答案的代码来自动完成付费处理订单:
/**
* AUTO COMPLETE PAID ORDERS IN 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 );
// 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 Orders with all others payment methods
else {
$order->update_status( 'completed' );
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是我通过 SMS 使用了一个特殊的支付网关,该网关的 API 桥接在“cod”支付方式上,并且订单有时会在这个“woocommerce_thankyou”挂钩上处于暂停状态。
所以我需要一直扫描“处理”订单,以完整状态传递它们。我尝试了不同的东西和钩子,但我无法按预期工作。
我怎样才能做到这一点?
谢谢
要使其正常工作,您只需要一个小功能,该功能将扫描“init”挂钩上具有“正在处理”状态的所有订单,并将此状态更新为“已完成”。
这是代码:
function auto_update_orders_status_from_processing_to_completed(){
// Get all current "processing" customer orders
$processing_orders = wc_get_orders( $args = array(
'numberposts' => -1,
'post_status' => 'wc-processing',
) );
if(!empty($processing_orders))
foreach($processing_orders as $order)
$order->update_status( 'completed' );
}
add_action( 'init', 'auto_update_orders_status_from_processing_to_completed' );
Run Code Online (Sandbox Code Playgroud)
此代码经过测试并有效。
代码位于活动子主题(或主题)的 function.php 文件中。或者也可以在任何插件 php 文件中。
建议和更新
有一个小错误各地发送电子邮件通知的两次是在这里解决:
避免在一些自动完成的订单重复的电子邮件通知