Automark ONLY Paid orders to “Completed” status in WooCommerce 3+

Deadly 提交于 2019-12-11 09:28:51

问题


I would like to automark just success paid orders to "Completed" status. I have searched a lot on Stack and Google, and found this answer code:
WooCommerce: Auto complete paid Orders (depending on Payment methods)

But problem is that the code mark all placed orders to "Completed" status not depending if order was success placed or not.

What do I need to change in the code to automark ONLY Paid orders to "Completed" status?


回答1:


New enhanced and simplified code version replacement (March 2019):

See: WooCommerce: Auto complete paid orders


Original answer:

For Paypal and other third party gateways, the "paid" order status to target is "processing" (and "completed"), so you can lightly change the code to:

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

Code goes in function.php file of the active child theme (or active theme). tested and works.

This way you will avoid "failed", "Cancelled" or "Pending" orders.



来源:https://stackoverflow.com/questions/53802485/automark-only-paid-orders-to-completed-status-in-woocommerce-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!