我需要一些关于如何继续以下实现的建议.对于我的网站在多语言​​中使用多语言作为插件,我将需要有单独的和连续的订单编号.例如:

  • 意大利语:IT-2024-01、IT-2024-02、IT-2024-03
  • 德语:DE-2024-01、DE-2024-02、DE-2024-03.

现在,我只对意大利人使用了这段代码:

/**
 * Orders Prefix
 */

add_filter( 'woocommerce_order_number', 'change_woocommerce_order_number' );

function change_woocommerce_order_number( $order_id ) {
    $order = wc_get_order( $order_id );
    
    if ( $order && $order->get_date_created() ) {
        $order_year = $order->get_date_created()->format( 'Y' );
        $prefix = 'IT-' . $order_year . '-';
        $new_order_id = $prefix . $order_id;
        return $new_order_id;
    }
    
    return $order_id;
}

推荐答案

这需要在 checkout 后创建订单时完成,将订单号设置为自定义元数据,以便每次从数据库读取订单号时保持轻量级流程.

以下代码将按国家代码、年份和递增编号(2位,或者您可以定义所需的位数)的顺序将订单编号设置为订单元数据.

// Set and save the order number as metadata
add_filter( 'woocommerce_checkout_create_order', 'save_order_number_metadata' );
function save_order_number_metadata( $order ) {
    $digits  = 2; // Number of desired digits for the number part
    $year    = date('Y', time()); // Get the current year
    $country = $order->get_billing_country(); // Get the billing country
    $data    = get_option('wc_sequential_order_number'); // Get order number sequencial helper registered data

    $number = isset($data[$year][$country]) ? intval($data[$year][$country]) + 1 : 1;
    $data[$year][$country] = $number;

    // Update order number sequencial helper registered data
    update_option('wc_sequential_order_number', $data);

    // Add order number as custom metadata
    $order->add_meta_data('_order_number', sprintf('%s-%s-%s', $country, $year, str_pad($number, $digits, '0', STR_PAD_LEFT)), true);
}

// Read the order number from metadata
add_filter( 'woocommerce_order_number', 'define_order_number', 10, 2 );
function define_order_number( $order_id, $order ) {
    if ( $order_number = $order->get_meta('_order_number') ) {
        $order_id = $order_number;
    }
    return $order_id;
}

代码放在子主题的functions.php文件中(或插件中).测试和作品.


对于手动创建的订单,它需要一些不同的东西,因为语言代码尚未定义.

Php相关问答推荐

从WooCommerce邮箱通知中的订单详细信息中删除产品列表

尽管包含目标日期,但日期范围比较仍有意外输出

Woocommerce自定义变体html表仅显示带值的列

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

在Laravel中,如果我用session—put()存储一些信息,客户端浏览器是否可以使用这些信息?>

如何优化-PHP 7.3.14+Laravel 6

Htaccess-重写对&api.php";的API请求以及对";web.php";的其他请求

在WooCommerce中添加基于类别的固定费用

PHP从响应应用程序json获取文件代码和URL

如何实现对数据库表中多列的唯一约束?

如何在laravel中添加延迟?

laravel Eloquent 模型的问题

如何在 PHP laravel 中将图像的透明背景转换为白色?

如何显示所有数组数据而不仅仅是最后的结果

htaccess php 文件,然后是文件夹

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

Laravel 从嵌套数组的第二级获取最后一项

PHP 中的 curl 验证失败(openssh 连接正常)

Laravel 响应 html 默认页面忽略控制器

使用 --exclude-dir 选项从 PHP 执行 grep 时出现问题