Woocommerce禁用自动更改订单状态->处理中

最后发布: 2017-09-18 13:01:00


问题

我想禁用此选项:
只要有人在我的网站上进行订购并付款成功,订单状态就会自动从待处理变为处理中

但是我不希望 启用此功能。 相反,我想在进行订单时手动进行操作。

我在woocommerce中发现了此功能,这使得此功能成为可能。 我不想直接在那里更改它,而是使用某种覆盖该功能的php代码片段。

这是我需要更改的功能: http : //woocommerce.wp-a2z.org/oik_api/wc_orderpayment_complete/

PS:我很难正确地做到这一点。

php wordpress woocommerce hook-woocommerce orders
回答

将以下代码添加到您的functions.php file.function中

ja_order_status( $order_status, $order_id ) {
    $order = new WC_Order( $order_id );

    if ( 'processing' == $order_status ) {
        return 'pending';
    }

    return $order_status;
}
add_filter( 'woocommerce_payment_complete_order_status', 'ja_order_status', 10, 2 );

WooCommerce上进行了测试, 店面通过Stripe 测试模式付费。


回答

更新

您所寻找的过程可能不涉及该payment_complete() 另外,您可以尝试使用woocommerce_thankyou操作钩子:

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

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

    if ( $order->has_status( 'processing' ) )
            $order-> update_status( 'pending' )
}

您可以使用相同的替代钩子: woocommerce_thankyou_{$order->get_payment_method()} (用付款方式ID slug代替$order->get_payment_method()

代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。

该代码已在Woocommerce 3+上进行了测试并有效。


使用挂在woocommerce_valid_order_statuses_for_payment_complete过滤器挂钩中的自定义函数,您将在其中返回所需的订单状态,这些状态可以由负责自动更改订单状态的相关函数payment_complete()

默认情况下,过滤器中的订单状态数组为:

array( 'on-hold', 'pending', 'failed', 'cancelled' ).

我们可以通过以下方式删除“保留”订单状态:

add_filter( 'woocommerce_payment_complete_order_status', 'disable_auto_order_status', 10, 2 );
function disable_auto_order_status( $order_statuses, $order ) {
    $return array( 'pending', 'failed', 'cancelled' );
}

代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。

该代码已在Woocommerce 3+上进行了测试并有效。