在 WooCommerce 购物车中添加产品元的值作为费用
Posted
技术标签:
【中文标题】在 WooCommerce 购物车中添加产品元的值作为费用【英文标题】:Add the values of product meta as fee in WooCommerce cart 【发布时间】:2022-01-22 06:53:47 【问题描述】:在意大利,电子产品的处置有特定的费用,必须在购买时支付。
这种“ecofee”是针对每种产品的。
我为每个产品设置了一个特定的元数据,称为meta_product_grossecofee
我想将此元字段的值转换为购物车上的费用。
这是我尝试过的代码,但没有得到想要的结果。有什么建议吗?
add_action( 'woocommerce_cart_calculate_fees', 'ecofee_display' );
function ecofee_display()
global $product;
$ecofee = $product->get_meta('meta_product_grossecofee');
if ($ecofee)
WC()->cart->add_fee(__('Ecofee: ', 'txtdomain'), $ecofee);
【问题讨论】:
【参考方案1】:购物车可以包含多个产品,所以global $product
在这里不适用。
相反,您可以浏览购物车并为每个存在元数据的产品,将其价值添加到费用中。
如果 $fee 大于 0,则可以申请。
所以你得到:
function action_woocommerce_cart_calculate_fees( $cart )
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Initialize
$fee = 0;
// Loop through cart contents
foreach ( $cart->get_cart_contents() as $cart_item )
// Get meta
$ecofee = $cart_item['data']->get_meta( 'meta_product_grossecofee', true );
// NOT empty & variable is a number
if ( ! empty ( $ecofee ) && is_numeric( $ecofee ) )
// Addition
$fee += $ecofee;
// If greater than 0
if ( $fee > 0 )
// Add additional fee (total)
$cart->add_fee( __( 'Ecofee', 'woocommerce' ), $fee, false );
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
注意:如果您想考虑每个产品的数量:
替换
// NOT empty & variable is a number
if ( ! empty ( $ecofee ) && is_numeric( $ecofee ) )
// Addition
$fee += $ecofee;
有
// NOT empty & variable is a number
if ( ! empty ( $ecofee ) && is_numeric( $ecofee ) )
// Get product quantity in cart
$quantity = $cart_item['quantity'];
// Addition
$fee += $ecofee * $quantity;
【讨论】:
我觉得很愚蠢,没想到在这种情况下不能使用 global $product。 :-) 你写的代码很完美而且不容易。非常感谢您的宝贵帮助以上是关于在 WooCommerce 购物车中添加产品元的值作为费用的主要内容,如果未能解决你的问题,请参考以下文章
在 Woocommerce 购物车页面中的购物车商品名称后添加产品 ID
在 Woocommerce 中的产品摘要下方添加额外的添加到购物车按钮