$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");
以上代码将产品256
添加到购物车1
时间。但我遇到的问题是我希望能够完全覆盖产品价格...据我所知,我唯一能做的就是将优惠券应用到购物车。
有没有办法将价格完全覆盖到完全定制的价格?
答案 0 :(得分:51)
以下是购物车中产品价格优先的代码
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->price = $custom_price;
// for WooCommerce version 3+ use:
// $value['data']->set_price($custom_price);
}
}
希望它会有用......
答案 1 :(得分:43)
您需要在上面的代码中引入if
语句来检查产品ID:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
$target_product_id = 598;
foreach ( $cart_object->cart_contents as $value ) {
if ( $value['product_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
/*
// If your target product is a variation
if ( $value['variation_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
*/
}
}
在任何地方添加此代码,并确保此代码始终可执行。
添加此代码后,您将致电:
global $woocommerce;
$woocommerce->cart->add_to_cart(598);
只有这个产品才会被覆盖价格,添加到购物车的其他产品将被忽略,价格优先。
希望这会有所帮助。
答案 2 :(得分:12)
我已经尝试了以上所有代码示例,最新的woocommerce 3.0不支持以上任何示例。使用下面的代码,并为我完美地工作。
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custom price
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$cart_item['data']->set_price($custom_price);
}
}
答案 3 :(得分:3)
对于Wordpress和Woocommerce的最新版本,请使用这样的
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
$custom_price = 5;
$value['data']->set_price($custom_price);
}
}
答案 4 :(得分:1)
要使其动态化(单独覆盖购物车中每件商品的价格),您需要使用woocommerce_add_to_cart
挂钩将购物车商品密钥作为会话密钥保存在会话中。
通过使用这些会话值,您可以计算正确的购物车总数,并使更改的价格也显示在订单商品中
答案 5 :(得分:1)
使用WooCommerce 2.5,我发现这是一个由两部分组成的过程。第一步是通过woocommerce_add_cart_item过滤器添加到购物车时更改定价的运行时显示。第二部分是通过woocommerce_get_cart_item_from_session过滤器设置在结账时读取的持久会话数据。这似乎比连接计算总计过滤器(例如woocommerce_before_calculate_totals)更快,因为它们在WooCommerce中经常运行。
答案 6 :(得分:1)
对于从谷歌来到这里的eveeryone。以上现已弃用,因为我发现更新到WooCommerce 3.0.1。
而不是上述内容,您现在需要使用set_price
代替price
以下是一个例子:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
foreach ( $cart_object->cart_contents as $key => $value ) {
$value['data']->set_price = $custom_price;
}
}
我希望这有助于未来的人们:)
答案 7 :(得分:0)
我就是这样做的,首先我将自定义价格添加到cart_item_data女巫可以将自定义数据保存到购物车商品,然后我使用woocommerce_before_calculate_totals,循环购物车并添加之前添加的价格。
function add_donation_to_cart() {
$cart_item_data = array('price' => $_REQUEST['donate_amount']);
$woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data);
}
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart ) {
foreach ( $cart->cart_contents as $key => $value ) {
$value['data']->price = $value['price'];
}
}
答案 8 :(得分:0)
add_filter('woocommerce_cart_item_price','kd_custom_price_message');
函数kd_custom_price_message($ price){
$textafter = ' USD';
return $price . $textafter;
}