【问题标题】:Auto complete WooCommerce orders depending on total amount根据总金额自动完成 WooCommerce 订单
【发布时间】:2019-09-30 20:12:50
【问题描述】:

我希望禁用自动完成订单,但仅限于金额高于 30 欧元的订单。所有产品都是虚拟的。

我在网上找到了这个功能:

add_action( 'woocommerce_thankyou', 'stop_auto_complete_order' );
function stop_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) {
        return;
    }

    $order = wc_get_order( $order_id );
    $order->update_status( 'processing' );
}

但我不知道如何制作,只有当订单高于特定数量时。

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    您需要使用一些WC_Order methods 之类的:

    • 订单总金额:get_total()
    • 订单状态:get_status()

    根据您的代码,以下将:

    • 自动完成最多 30 个已付款订单(将设置为“已完成”状态)
    • 自动处理大于 30 的已付款订单(将设置为“处理中”状态)

    代码:

    add_action( 'woocommerce_thankyou', 'stop_auto_complete_order' );
    function stop_auto_complete_order( $order_id ) { 
        if ( ! $order_id ) {
            return;
        }
    
        $order = wc_get_order( $order_id );
    
        // Auto-complete paid orders up to 30 (for "on-hold" and "processing" order statuses)
        if ( $order->get_total() <= 30 && in_array( $order->get_status(), [ 'on-hold', 'processing' ] ) ) {
            $order->update_status( 'completed' );
        } 
        // Other paid orders are set to "processing" status
        elseif( $order->get_status() === 'on-hold' ) {
            $order->update_status( 'processing' );
        }
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • 我试过了,但它不起作用。在子主题中测试,然后直接在主主题中测试...
    • 您使用的支付网关 ID 是什么以及它们在成功(已支付)订单时的状态(无需使用某些代码对其进行更改)? … 你的问题细节很差。
    • 只使用 PayPal 而不添加任何代码。付款后无法选择状态。
    • 是否可能因为 paypal 正在捕获付款而无法正常工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2018-06-26
    • 1970-01-01
    • 2021-03-09
    • 2020-01-17
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多