WooCommerce 订单号的规则是默认的,但是当我们需要一套自己的订单号规则时。有三种选择:
一是修改主题下的 functions.php 文件,编辑自定义订单号规则;
二是使用插件, 去插件市场寻找免费的插件;
三是自己开发一款自定义订单号插件。
就三种方案而言我认为选前两种方案比较好,自己开发插件需要花时间弄,如果你有大量时间我认为第三种方案比较好。今天我们只讲第前两中方案。
方案一: 修改主题下的 functions.php 文件
我想将订单号按照“DD_+ 日期(20230508)+ 序号(001)”的规则生成:
add_filter('woocommerce_order_number', 'custom_order_number', 1, 2);
function custom_order_number($order_id, $order) {
// 检查订单是否已有自定义订单号
$order_number = $order->get_order_number();
if(strpos($order_number, 'DD_') !== false) {return $order_number;}
global $wpdb;
// 获取今天的订单数量
$current_date = date('Ymd');
$count = $wpdb->get_var($wpdb->prepare("
SELECT COUNT(*) FROM {$wpdb->prefix}woocommerce_orders
WHERE DATE(order_date) = %s
", $current_date)
);
// 设置订单号
$order_number = 'DD_'.$current_date.'_'.sprintf('%03d', $count + 1);
// 释放内存
unset($wpdb);
unset($current_date);
unset($count);
return $order_number;
}
这个代码会在现有的订单编号前面加上“DD_”前缀,并且在日期后面加上三位序号,如“DD_20230508_001”。如果已经有自定义订单号,则直接返回现有的订单号。
如果保存代码后报:Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) in X:\XXXXX\XXXX\wp-content\plugins\woocommerce\includes\class-wc-order.php on line 504
说明这个错误一般是因为脚本使用的内存超出了 PHP 所允许的最大内存限制。你可以尝试增加 PHP 的内存限制来解决这个问题。
通过以下两种方法来增加 PHP 的内存限制:
- 在 WordPress 的 wp-config.php 文件中添加以下代码:
define('WP_MEMORY_LIMIT', '256M');
这将把 WordPress 的内存限制增加到 256MB。
- 在 PHP.ini 文件中修改 memory_limit 指令:
-
找到 PHP.ini 文件中的
memory_limit
指令并将其设置为256M
方案二: 安装插件
目前好多插件都有免费的功能,如果想更多的功能一般就都要付费了。不过有的插件,免费的模块也够我们使用了。
我推荐一款免费的自定义订单号插件:Sequential Order Numbers for WooCommerce