WooCommerce订单状态从支付网关发生变化

时间:2016-08-03 11:02:12

标签: php wordpress woocommerce payment-gateway orders

我已经集成了一个支付网关,可以接受我在woocommerce上运行的商店的在线支付。一切正常但我注意到默认情况下,woocommerce正在将所有在线付费订单的订单状态更改为wc-processing

根据我商店的功能,我希望所有在线付费订单最初都处于wc-on-hold状态。

有没有办法阻止woocommerce以编程方式将订单状态更改为wc-processing

2 个答案:

答案 0 :(得分:3)

是的,有一种方法,但您需要修改付款插件或添加自己的代码,您可以read this了解付款的工作方式。

现在,woocommerce使用$order->payment_complete()方法来处理已完成的订单,因此您需要挂钩自己的函数来修改状态,here is the description of that method

使用此过滤器:woocommerce_payment_complete_order_status

答案 1 :(得分:2)

这是基于此thread的代码段。我们在这里使用 woocommerce_thankyou (在付款完成后即被解雇)来挂钩我们的功能,转换 'processing' 订单状态为 'on-hold'

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

    global $woocommerce;
    $order = new WC_Order( $order_id );

    // 'processing' orders status are converted to 'on-hold'.
    if ( is_object($order) && $order->has_status( 'processing' ) {
        $order->update_status( 'on-hold' ); 
    }

    return;
}

您还可以在条件中定位支付网关,例如我们绕过3个支付网关,并使用 "your_payment_gateway" slug 定位特定支付网关:

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

    global $woocommerce;
    $order = new WC_Order( $order_id );

    // Bypass orders 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;
    }

    // Target your "your_payment_gateway_slug" with this conditional
    if ( is_object($order) && get_post_meta($order->id, '_payment_method', true) == 'your_payment_gateway_slug'  && $order->has_status( 'processing' ) ) {
        $order->update_status( 'on-hold' ); 
    }

    return;
}

此代码段位于您的活动子主题或主题的function.php文件中。

您可以轻松地执行任何操作,并且付费订单的正确挂钩为 woocommerce_thankyou

参考文献: