php - WooCommerce 中所有现有处理订单的自动完成状态

标签 php wordpress woocommerce hook-woocommerce orders

我在 WooCommerce 上使用这段代码的和平 from this answer自动完成付费处理订单:

/**
 * 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' );
    }
} 

但问题是我通过 SMS 使用一个特殊的支付网关,该网关的 API 桥接在“cod”支付方式上,并且订单有时会在这个“woocommerce_thankyou” Hook 上处于暂停状态。

因此,我需要一直扫描“处理中”订单,以便以完整状态传递它们。我尝试了不同的东西和钩子(Hook),但我无法让它按预期工作。

我该怎么做?

谢谢

最佳答案

要实现此功能,您只需要一个小功能即可扫描“init” Hook 上状态为“处理中”的所有订单,并将此状态更新为“已完成”。

这是代码:

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' );

此代码已经过测试并且可以工作。

代码位于您的事件子主题(或主题)的 function.php 文件中。或者也可以在任何插件 php 文件中。

ADVICE & UPDATE

There is a little bug around email notifications sent twice that is solved in here:
Avoid repetitive emails notification on some auto completed orders

关于php - WooCommerce 中所有现有处理订单的自动完成状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037932/

相关文章:

wordpress - 如何编辑 woocommerce 管理订单页面?

php - 在 PHP 中使用越南字符(不是 Unicode)的正确字符集

PHP 克隆子代

php - 如何正确地 substr html 实体?

php - 仅在 WooCommerce Admin 手动订单的单个订单中显示产品自定义字段

PHP 安装似乎缺少 WordPress 所需的 MySQL 扩展。 4个

php - 基于 WooCommerce 中所选品牌的动态选择字段选项

php - 具有高级(列)过滤的 CRUD?

php - 如何获取 Wordpress 上传目录中的所有图像,然后全部显示?

php - 仅在取消订阅时停止用户角色更改