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

能否修改WooCommerce中欧盟非保加利亚订单的Webhook传输数据?

如何过滤/修改WooCommerce Webhook传输的订单信息

核心结论

完全可以通过自定义代码过滤并修改WooCommerce Webhook的传输内容,且不会改动商城内的实际订单数据。你可以在当前主题的functions.php文件中添加代码,实现针对欧盟内保加利亚以外国家订单的特定修改需求。

实现代码

以下是满足需求的代码示例:

add_filter( 'woocommerce_webhook_payload', 'custom_modify_ec_non_bg_order_webhook', 10, 4 );
function custom_modify_ec_non_bg_order_webhook( $payload, $resource, $resource_id, $webhook ) {
    // 仅针对订单类型的Webhook
    if ( 'order' !== $resource ) {
        return $payload;
    }

    // 获取订单对象
    $order = wc_get_order( $resource_id );
    if ( ! $order ) {
        return $payload;
    }

    // 定义欧盟国家代码列表(ISO 3166-1 alpha-2)
    $eu_countries = array( 'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'RO', 'SE', 'SI', 'SK' );
    
    // 获取订单收货国家代码
    $billing_country = $order->get_billing_country();

    // 判断:属于欧盟国家且不是保加利亚
    if ( in_array( $billing_country, $eu_countries ) && 'BG' !== $billing_country ) {
        // 获取含VAT的订单总价
        $total_inc_tax = $order->get_total();
        
        // 修改payload中的总价字段(匹配WooCommerce默认Webhook的字段结构)
        $payload['total'] = strval( $total_inc_tax );
        $payload['total_tax'] = '0.00';
        
        // 修改订单行项目的VAT信息,确保每行都显示0%税率
        if ( isset( $payload['line_items'] ) && is_array( $payload['line_items'] ) ) {
            foreach ( $payload['line_items'] as &$item ) {
                $item['taxes'] = array();
                $item['total_tax'] = '0.00';
                $item['tax_class'] = 'zero-rate';
                $item['subtotal_tax'] = '0.00';
            }
        }
    }

    return $payload;
}

代码说明

  1. 过滤器选择:使用woocommerce_webhook_payload过滤器,这是WooCommerce官方提供的用于修改Webhook传输数据的钩子,只会影响Webhook的输出,不会改动商城内的订单数据。
  2. 范围限制:仅对订单类型的Webhook生效,避免影响其他资源(如产品、客户)的Webhook传输。
  3. 国家判断:通过ISO国家代码判断订单是否来自欧盟且非保加利亚,确保修改只针对目标订单。
  4. 数据修改:
    • 将订单总价设为含VAT的金额(WooCommerce默认get_total()方法返回的就是含税费的总价)
    • 将总税费、行项目税费设为0.00,税率类设为零税率,确保外部API收到的是含VAT的总价且显示0% VAT。

效果验证

以德国客户购买10欧元LED灯为例:

  • 商城内订单实际总价为11.90欧元(含19% VAT)
  • Webhook传输的payload中,total字段为11.90,total_tax为0.00,行项目的税费信息也会被重置为0%,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:47:32