当我将产品添加到购物车时,我试图为其添加费用(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;
}
谢谢您的帮助!
您的代码中存在一些错误,并且缺少一些功能...要为购物车中的每个产品变体添加费用,请尝试以下操作:
// 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 文件中(或插件中)。应该可以。