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

如何基于Local Pickup Plus取货地点设置WooCommerce自定义订单状态

解决WooCommerce Local Pickup Plus取货地点对应自定义订单状态问题

问题分析

你注册自定义订单状态的代码是有效的,但根据取货地点设置状态的代码未生效,核心原因有两点:

  1. 取货地点ID的meta键错误:Skyverge Local Pickup Plus存储取货地点ID的标准meta键是_sv_lpp_pickup_location_id,而非你使用的_pickup_location_id。
  2. 钩子时机不合适:woocommerce_checkout_order_processed执行后,可能被WooCommerce核心逻辑或其他插件重置订单状态为默认的"Pending"。

修正后的代码

保留你已有的自定义订单状态注册代码,替换状态设置部分的代码为:

// 根据结账时选择的取货地点设置订单状态
add_action( 'woocommerce_checkout_create_order', 'change_order_status_based_on_pickup_location', 20, 2 );
function change_order_status_based_on_pickup_location( $order, $data ) {
    // 遍历订单中的配送方式
    foreach( $order->get_shipping_methods() as $shipping_item ){
        // 获取Local Pickup Plus存储的取货地点ID
        $location_id = $shipping_item->get_meta( '_sv_lpp_pickup_location_id' );

        if ( $location_id == '8124' ) {
            // 设置对应自定义状态,状态名可省略wc-前缀
            $order->set_status( 'in_behandeling_locatie_antwerpen', '订单分配至安特卫普处理' );
        } elseif ( $location_id == '8123' ) {
            $order->set_status( 'in_behandeling_locatie_mechelen', '订单分配至梅赫伦处理' );
        } else {
            // 调试日志,记录未识别的地点ID
            error_log( '未识别的取货地点ID: ' . $location_id );
        }
    }
}

关键调整说明

  • 钩子替换:使用woocommerce_checkout_create_order钩子,在订单创建阶段直接设置状态,避免后续被状态重置逻辑覆盖。
  • meta键修正:使用插件标准的_sv_lpp_pickup_location_id获取取货地点ID,确保能正确读取用户选择的取货地点。
  • 状态设置优化:set_status方法支持传入不带wc-前缀的状态slug,同时第二个参数可添加订单备注,便于后台查看状态变更原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:27:48