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

在多语言WooCommerce站点(Polylang)设置分国别年份前缀的连续订单号

Polylang+WooCommerce 按语言生成独立连续订单编号方案优化

你的现有代码只是给订单添加了固定的IT前缀,但存在两个核心问题:

  • 不同语言站点会共用原生订单ID,无法实现各自的连续编号(比如IT和DE可能同时出现-05的编号)
  • 没有针对不同语言环境动态切换前缀

下面是满足需求的完整实现方案:

核心思路

  1. 利用Polylang函数获取当前订单对应的语言代码,动态生成前缀(IT/DE等)
  2. 为每个语言+年份维护独立的计数器,存储在WordPress选项中,确保编号连续唯一
  3. 给订单添加自定义元数据存储生成后的编号,避免重复计算

完整代码实现

/**
 * 按语言生成独立连续订单编号
 */
add_filter( 'woocommerce_order_number', 'polylang_custom_order_number', 10, 2 );
function polylang_custom_order_number( $order_id, $order ) {
    // 检查订单是否已生成自定义编号,避免重复计算
    $custom_order_number = get_post_meta( $order_id, '_custom_order_number', true );
    if ( ! empty( $custom_order_number ) ) {
        return $custom_order_number;
    }

    // 确保Polylang函数可用
    if ( ! function_exists( 'pll_get_post_language' ) ) {
        return $order_id;
    }

    // 获取订单对应的语言代码(转大写)
    $lang_code = strtoupper( pll_get_post_language( $order_id ) );
    if ( empty( $lang_code ) ) {
        $lang_code = 'IT'; // 默认前缀,可根据需求修改
    }

    // 获取订单创建年份
    $order_year = $order->get_date_created()->format( 'Y' );

    // 构建计数器选项名
    $counter_key = 'wc_order_counter_' . strtolower( $lang_code ) . '_' . $order_year;
    // 获取当前计数器值,不存在则初始化为1
    $current_counter = get_option( $counter_key, 1 );

    // 格式化编号:前缀-年份-两位数字编号
    $custom_order_number = sprintf( '%s-%s-%02d', $lang_code, $order_year, $current_counter );

    // 存储自定义编号到订单元数据
    update_post_meta( $order_id, '_custom_order_number', $custom_order_number );
    // 更新计数器(自增1)
    update_option( $counter_key, $current_counter + 1 );

    return $custom_order_number;
}

关键细节说明

  • 语言获取:使用pll_get_post_language($order_id)获取订单关联的语言,确保订单归属对应语言站点的编号序列
  • 计数器存储:每个语言+年份单独维护计数器,比如wc_order_counter_it_2024存储意大利语2024年的订单编号计数
  • 编号格式化:用%02d确保编号是两位数字(01、02...99),如果需要更多位数可改为%03d(001等)
  • 避免重复计算:通过自定义元数据_custom_order_number存储生成的编号,编辑订单时不会重新生成

注意事项

  1. 确保Polylang已将WooCommerce订单(shop_order)设置为可翻译的自定义文章类型(在Polylang设置的「自定义文章类型」中勾选)
  2. 首次使用前,可手动在WordPress选项中初始化计数器(比如意大利语2024年已存在3个订单,就设置wc_order_counter_it_2024的值为4)
  3. 建议在测试环境先验证功能,避免影响线上订单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:29