编程语言
首页 > 编程语言> > php – WooCommerce改变订单状态BACS处理

php – WooCommerce改变订单状态BACS处理

作者:互联网

在WooCommerce中,任何与BACS(直接银行转账)一起下的订单都设置为“暂停”.

如何自动将其更改为处理?

我不想在functions.php里面工作

我有以下代码,但这不起作用:

add_filter( 'woocommerce_payment_complete_order_status', 'rfvc_update_order_status', 10, 2 );

function rfvc_update_order_status( $order_status, $order_id ) {
    $order = new WC_Order( $order_id );
    if ( 'on-hold' == $order_status && 'on-hold' == $order->status ) {
        return 'processing';
    }
    return $order_status;
}

任何帮助都会很棒!

解决方法:

Update (added a version for woocommerce 3+ at the end)

似乎woocommerce_payment_complete_order_status动作挂钩不会触发BACS支付方式.

基于this thread,’woocommerce_thankyou’动作挂钩完成工作:

add_action( 'woocommerce_thankyou', 'bacs_order_payment_processing_order_status', 10, 1 );

function bacs_order_payment_processing_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }

    // Get an instance of the WC_Order object
    $order = new WC_Order( $order_id );

    if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status || 'pending' == $order->status) ) {
        $order->update_status('processing');
    } else {
        return;
    }
}

代码位于活动子主题(或活动主题)的function.php文件中.测试和工作.

对于woocommerce 3版本:

这里我们使用类似的复合钩woocommerce_thankyou_{$order->get_payment_method()}

add_action( 'woocommerce_thankyou_bacs', 'bacs_order_payment_processing_order_status', 10, 1 );
function bacs_order_payment_processing_order_status( $order_id ) {
    if ( ! $order_id ) {
        return;
    }

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    if ( in_array( $order->get_status(), array('on-hold', 'pending') ) ) {
        $order->update_status('processing');
    } else {
        return;
    }
}

代码位于活动子主题(或活动主题)的function.php文件中.测试和工作.

标签:orders,php,wordpress,woocommerce,payment-method
来源: https://codeday.me/bug/20190724/1525381.html