在 WooCommerce 购物车中添加产品元数据作为费用

Add the values of product meta as fee in WooCommerce cart

在意大利,处理电子产品需要支付一定的费用,必须在购买时支付。

这个“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);
    }
}

购物车可以包含多个产品,因此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;
}