根据送货方式更改Woocommerce订单状态

时间:2017-11-14 12:39:30

标签: php wordpress woocommerce shipping orders

这里的想法是,当一个订单进入"快递"作为装运方法,订单状态更新为暂停。

因为我有一些不同的"快递"运费方式费率我认为通过使用stristr()来查看单词'express'是否出现在格式化的送货方式标题中的任何位置。但我似乎错过了一些东西,因为我没有得到任何东西。

如何检查订单发货方式是否为"快递"能够更新订单状态吗?

以下是我的代码:

add_action( 'woocommerce_thankyou', 'express_orders_4865', 10, 1 );
function express_orders_4865( $order_id ) {
    global $woocommerce;

    $order = new WC_Order( $order_id );

    $shipping_method = $order->get_shipping_method();

    if (stristr($shipping_method, 'express') === TRUE) {
        $order->update_status('on-hold');
    } else {
        return;
    }
}

EDIT ---------------------------------------------- -------------

对于任何使用Woocommerce表格运费的人来说,get_method_id会返回表格费率ID,所以我使用了get_method_title,如下所示,如果有更好的方法请注释...

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

    $search = 'Express'; // The needle to search in the shipping method ID

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

    // Get the WC_Order_Item_Shipping object data
    foreach($order->get_shipping_methods() as $shipping_item ){
        // When "express delivery" method is used, we change the order to "on-hold" status


        if( strpos( $shipping_item->get_method_title(), $search ) !== false ){
            $order->update_status('on-hold');
            break;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我更喜欢使用更快且内存更少的功能 strpos() ,因为送货方式ID总是小写的(就像一种slu g)。

因此,使用可用的方法获取此案例的WC_Order_Item_Shipping对象数据会更好。

所以代码应该是:

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

    $search = 'express'; // The needle to search in the shipping method ID

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

    // Get the WC_Order_Item_Shipping object data
    foreach($order->get_shipping_methods() as $shipping_item ){
        // When "express delivery" method is used, we change the order to "on-hold" status
        if( strpos( $shipping_item->get_method_id(), $search ) !== false ){
            $order->update_status('on-hold');
            break;
        }
    }
}

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

经过测试和工作......

答案 1 :(得分:0)

所以上面的代码对我不起作用,我在FB小组中有人帮助我调试它,这是最后一个对我有用的代码

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

    $search = 'express'; // The needle to search in the shipping method ID

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

    // Get the WC_Order_Item_Shipping object data
    foreach($order->get_shipping_methods() as $shipping_item ){
        // When "express delivery" method is used, we change the order to "on-hold" status
        if( strpos( $shipping_item->get_method_title(). $search ) !== false ){
            $order->update_status('on-hold');
            $order->save();
            break;
        }
    }
}