【问题标题】:Add the values of product meta as fee in WooCommerce cart在 WooCommerce 购物车中添加产品元的值作为费用
【发布时间】: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);
    }
}

【问题讨论】:

    标签: wordpress woocommerce product cart fee


    【解决方案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。 :-) 你写的代码很完美而且不容易。非常感谢您的宝贵帮助
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2021-05-09
    • 2021-08-22
    相关资源
    最近更新 更多