You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据不同配送、支付方式设置WooCommerce自定义订单状态?

问题原因
  • 你代码中第一个if...else判断无论是否匹配到对应快递配送方式,都会执行break直接跳出循环,后续的自提配送方式判断逻辑完全不会被执行,所以所有订单都会命中第一个判断分支的状态,导致所有选项匹配到同一个自定义状态。
  • 逻辑结构错误:不能在未匹配到当前配送方式时就直接设置订单状态并终止执行,应该先匹配到对应配送方式类型后,再结合支付方式设置对应状态。
修复后代码
add_action( 'woocommerce_thankyou', 'express_shipping_update_order_status', 10, 1 );
function express_shipping_update_order_status( $order_id ) {
    if ( ! $order_id ) return;
    
    $search_rm = 'Despacho Express Todo Santiago (Excluye Padre Hurtado. Recibe al siguiente día hábil)'; 
    $search_estoril = 'Retiro en Tienda Estoril';
    $search_vina = 'Retiro en Tienda Reñaca';
    
    $order = wc_get_order( $order_id );
    $payment_method = $order->get_payment_method();

    foreach( $order->get_shipping_methods() as $shipping_item ){
        $shipping_title = $shipping_item->get_method_title();
        // 匹配快递配送
        if( strpos( $shipping_title, $search_rm ) !== false ){
            $target_status = $payment_method == "bacs" ? 'check-payment' : 'express-rm';
            $order->update_status($target_status);
            break;
        }
        // 匹配Estoril门店自提
        elseif( strpos( $shipping_title, $search_estoril ) !== false ){
            $target_status = $payment_method == "bacs" ? 'check-payment' : 'retiro-rm';
            $order->update_status($target_status);
            break;
        }
        // 匹配Reñaca门店自提
        elseif( strpos( $shipping_title, $search_vina ) !== false ){
            $target_status = $payment_method == "bacs" ? 'check-payment' : 'retiro-vina';
            $order->update_status($target_status);
            break;
        }
    }
}
修改说明
  1. 调整了判断逻辑,只有匹配到对应配送方式后,才会结合支付方式设置对应订单状态,未匹配到当前配送方式时会继续执行后续配送方式的判断。
  2. 仅在匹配到对应配送方式、完成状态设置后才执行break跳出循环,避免提前终止逻辑。
  3. 简化了支付方式判断的写法,可读性更高。

内容的提问来源于stack exchange,提问作者EzzeOnursito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:57:02