当产品是可变产品时,向传递到购物车的产品添加费用

问题描述 投票:0回答:1

当我将产品添加到购物车时,我试图为其添加费用(20 美元)。

当产品是简单产品时,我的功能有效。但当它是变体产品时则不然。我尝试了以下代码,该代码在第 6 行抛出 eval() 代码错误:

add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 10, 3 );
function add_cart_item_data( $cart_item_data, $product_id, $variation_id ) {    
    $product_simple = wc_get_product( $product_id );
    $product_var = wc_get_product( $variation_id ); 
    $price_simple = $product_simple->get_price();
    $price_var = $product_var->get_price(); 
    if ( $price_simple !== $price_var ) {
        $price = $price_var;
    } else {
        $price = $price_simple;
    }   
    if( ! empty( $_POST['custom_text_add_on'] ) ) {
        $cart_item_data['new_price'] = $price + 20;
    }
return $cart_item_data;
}

谢谢您的帮助!

woocommerce hook-woocommerce cart
1个回答
0
投票

您的代码中存在一些错误,并且缺少一些功能...要为购物车中的每个产品变体添加费用,请尝试以下操作:

// Define variation price with fee
add_filter( 'woocommerce_add_cart_item_data', 'define_variation_price_with_fee', 10, 3 );
function define_variation_price_with_fee( $cart_item_data, $product_id, $variation_id ) {   
    // Only for variations
    if ( $variation_id > 0 ) {
        // Define the fee amount to be added
        $variation_fee = 20; 
        // Get an instance of the product variation object
        $variation     = wc_get_product( $variation_id ); 
        // Add price with fee as custom cart item data
        $cart_item_data['price_with_fee'] = $variation->get_price() + $variation_fee;
    }
    return $cart_item_data;
}


// Display variation price with fee html (cart, mini-cart and checkout)
add_action( 'woocommerce_cart_item_price', 'display_variation_price_with_fee', 10, 2 );
function display_variation_price_with_fee($price, $cart_item) {
    // Check item for the price with fee
    if ( isset($cart_item['price_with_fee']) ) {
        // Set the price with fee in arguments
        $args = array('price' => floatval($cart_item['price_with_fee']));

        if ('incl' === get_option('woocommerce_tax_display_cart')) {
            $product_price = wc_get_price_including_tax($cart_item['data'], $args);
        } else {
            $product_price = wc_get_price_excluding_tax($cart_item['data'], $args);
        }
        return wc_price($product_price);
    }
    return $price;
}

// Set variation price with fee (when order is submitted)
add_action( 'woocommerce_before_calculate_totals' , 'set_variation_price_with_fee' );
function set_variation_price_with_fee( $cart ) { 
    if ( is_admin() && !defined('DOING_AJAX') )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $item ) {
        // Check items for the price with fee
        if ( isset($item['price_with_fee']) ) {
            // Set the price with fee
            $item['data']->set_price($item['price_with_fee']);
        }
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.