将使用支票付款方式的订单状态更改为“处理中”状态

问题描述 投票:0回答:3

我需要将 WooCommerce 通过支票推送的付款转入“正在处理”状态,而不是“暂停”状态。我尝试了下面的代码片段,但似乎没有效果。

这是我的代码:

add_filter( 'woocommerce_payment_complete_order_status', 'sf_wc_autocomplete_paid_orders' );

function sf_wc_autocomplete_paid_orders( $order_status, $order_id ) {

$order = wc_get_order( $order_id );

if ($order->status == 'on-hold') {
    return 'processing';
}

return $order_status;
}

我怎样才能实现这个目标?

谢谢。

php wordpress woocommerce orders payment-method
3个回答
12
投票

这是您正在查看的函数,它挂在

woocommerce_thankyou
钩子中:

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

    $order = wc_get_order( $order_id );

    // Updating order status to processing for orders delivered with Cheque payment methods.
    if ( $order->get_payment_method() === 'cheque' ) {
        $order->update_status( 'processing' );
    }
}

此代码位于活动子主题(或主题)的 function.php 文件中,或者也位于任何插件文件中。

这已经过测试并且有效。


相关主题:WooCommerce:自动完成付款订单


5
投票

我不想使用 Thank You 过滤器,以防订单在上一步中仍设置为 On Hold,然后在过滤器中将其更改为我想要的状态(在我的情况下是自定义状态,或者处理在你的)。所以我在检查网关中使用了过滤器:

add_filter( 'woocommerce_cheque_process_payment_order_status', 'myplugin_change_order_to_agent_processing', 10, 1 );
function myplugin_change_order_to_agent_processing($status){
    return 'agent-processing';
}

我希望这可以帮助其他人知道还有另一种选择。


0
投票

LoicTheAztec 之前的答案已经过时,并且给出了有关直接访问订单对象上的对象字段的错误。

正确的代码应该是

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

    $order = wc_get_order( $order_id );

    // Updating order status to processing for orders delivered with Cheque payment methods.
    if (  get_post_meta($order->get_id(), '_payment_method', true) == 'cheque' )
        $order->update_status( 'processing' );
}
© www.soinside.com 2019 - 2024. All rights reserved.