在WooCommerce 3+中,仅将自动将付费订单标记为“已完成”状态

时间:2018-12-16 13:12:35

标签: php wordpress woocommerce orders payment-method

我想将成功付款的订单自动标记为“已完成”状态。我在Stack和Google上进行了大量搜索,找到了以下答案代码:
WooCommerce: Auto complete paid Orders (depending on Payment methods)

但是问题在于代码将所有下达的订单标记为“已完成”状态,而不取决于订单是否成功下达。

我需要更改代码中的哪些内容以将仅已付款的订单自动标记为“已完成”状态?

1 个答案:

答案 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文件中。经过测试并可以正常工作。

  

这样,您将避免“失败”,“取消”或“待处理”订单。