在 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 如何添加消息

在 Woocommerce 购物车中自动添加或删除免费产品

在 Woocommerce 购物车页面中的购物车商品名称后添加产品 ID

在 Woocommerce 中的产品摘要下方添加额外的添加到购物车按钮

在WooCommerce中产品缺货时更改单个添加到购物车文本

在 WooCommerce 购物车页面中的每个产品下方添加运输类别