
在 woocommerce 商店运营中,经常需要根据特定商品收取额外的费用,例如包装费、服务费或特殊处理费。然而,传统的做法往往难以实现为不同商品设定不同金额的附加费。直接复制粘贴代码段为每个商品添加费用不仅效率低下,容易出错,还会导致购物车多次循环计算,严重影响网站性能。本文将介绍两种基于 woocommerce_cart_calculate_fees 动作钩子的解决方案,利用 php 数组的强大功能,实现灵活、高效且可维护的差异化费用添加。
此方法适用于您希望为购物车中多个特定商品添加费用,但最终将这些费用合并显示为一笔总附加费用的场景。它通过一个简单的键值对数组来定义商品ID及其对应的附加费用。
核心原理:
示例代码:
/**
* 为购物车中特定商品添加合并的附加费用。
*
* @param WC_Cart $cart WooCommerce 购物车对象。
*/
function action_woocommerce_cart_calculate_fees_summed( $cart ) {
// 确保只在前端执行,避免管理后台或 AJAX 请求的干扰
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
// 定义商品ID及其对应的附加费用。
// 格式:附加费用金额 => 商品ID
$settings = array(
10 => 1234, // 商品ID 1234 对应 10 单位的费用
20 => 5678, // 商品ID 5678 对应 20 单位的费用
5 => 30, // 商品ID 30 对应 5 单位的费用
2 => 815, // 商品ID 815 对应 2 单位的费用
);
// 初始化附加费用总额
$additional_fee_total = 0;
// 遍历购物车中的所有商品
foreach ( $cart->get_cart_contents() as $cart_item ) {
$product_id = $cart_item['product_id'];
// 在设置数组中查找商品ID,并获取对应的费用(即数组的键)
if ( false !== $key = array_search( $product_id, $settings ) ) {
$additional_fee_total += $key; // 累加费用
}
}
// 如果存在匹配的商品ID且总费用大于0,则添加附加费用
if ( $additional_fee_total > 0 ) {
// 添加附加费用到购物车,'Additional fee' 是费用名称,false 表示不含税
$cart->add_fee( __( 'Additional fee', 'woocommerce' ), $additional_fee_total, false );
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees_summed', 10, 1 );注意事项:
如果您希望客户清楚地看到每笔附加费用对应哪个商品或服务,并为每笔费用提供自定义名称,则可以使用多维数组来实现。这种方法允许您为每个特定商品定义独立的费用名称和金额。
核心原理:
示例代码:
/**
* 为购物车中特定商品添加明细的差异化附加费用。
*
* @param WC_Cart $cart WooCommerce 购物车对象。
*/
function action_woocommerce_cart_calculate_fees_detailed( $cart ) {
// 确保只在前端执行
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
// 定义详细的附加费用设置
// 每个数组元素代表一个商品的费用设置,包含商品ID、金额和费用名称
$settings = array(
array(
'product_id' => 30,
'amount' => 5,
'name' => __( 'Additional service fee', 'woocommerce' ), // 商品ID 30 的服务费
),
array(
'product_id' => 813,
'amount' => 10,
'name' => __( 'Packing fee', 'woocommerce' ), // 商品ID 813 的包装费
),
array(
'product_id' => 815,
'amount' => 15,
'name' => __( 'Another fee', 'woocommerce' ), // 商品ID 815 的其他费用
),
);
// 遍历购物车中的所有商品
foreach ( $cart->get_cart_contents() as $cart_item ) {
$product_id = $cart_item['product_id'];
// 遍历设置数组,查找匹配的商品ID
foreach ( $settings as $setting ) {
// 如果找到匹配的商品ID
if ( $setting['product_id'] == $product_id ) {
// 添加单独的附加费用到购物车
// 参数:费用名称,费用金额,是否含税
$cart->add_fee( $setting['name'], $setting['amount'], false );
}
}
}
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees_detailed', 10, 1 );注意事项:
通过利用 woocommerce_cart_calculate_fees 动作钩子和结构化的 PHP 数组,我们可以高效且灵活地在 WooCommerce 购物车中为不同商品添加差异化的附加费用。无论是需要将所有费用合并显示为一笔总额,还是希望清晰地展示每笔费用的明细,上述两种解决方案都能满足您的需求,同时避免了常见的性能陷阱和维护难题。采用这些专业级的实现方式,将显著提升您的 WooCommerce 商店功能性和用户体验。
以上就是如何在 WooCommerce 购物车中为不同商品添加差异化附加费用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号