2012-09-08 103 views
29
$replace_order = new WC_Cart(); 
$replace_order->empty_cart(true); 
$replace_order->add_to_cart("256", "1"); 

上述代码将产品256添加到购物车1时间。但我遇到的问题是,我希望能够完全覆盖产品价格......据我所知,我唯一能做的就是将优惠券应用于购物车。WooCommerce:将产品添加到价格优先的购物车?

有没有办法将价格完全覆盖到完全自定义的东西?

+0

检查这个环节非常有益的https://www.cloudways .com/blog/change-woocommerce-price-display/ – Sourabh

回答

46

这里是覆盖产品的价格在购物车

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); 
    } 
} 

希望这将是有用的代码...

+0

非常感谢!你有很多WooCommerce的经验吗? – dcolumbus

+5

这会更新购物车。但仍然在顶部的快速购物车图标中显示实际的产品价格。任何钩子? –

+1

抱歉,碰到这....上面的工作与变化? – danyo

41

您需要引入一个if语句,检查产品标识,在上面的代码:

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); 

只有这款产品将覆盖的价格被添加,其他产品加入购物车的覆盖价格将被忽略。

希望这会有所帮助。

+1

如何根据用户输入设置自定义价格?这个自定义价格是硬编码的。有什么建议么?类似于函数add_custom_price($ cart_object,$ custom_price) – shish

+1

如何动态获取添加到购物车按钮的产品的目标产品ID是否被点击? –

+2

似乎这两个答案应该结合起来。 – Kirby

1

要使其成为动态的(分别替代购物车中的每件商品的价格),您需要使用woocommerce_add_to_cart钩子将购物车商品密钥中的优先商品价格保存为会话密钥。

通过使用这些会话值就可以计算出正确的车总计并作出改变价格出现在订单项目以及

您可以参考以下guide用一个例子完整的详细信息。

1

随着WooCommerce 2.5我发现这是一个由2部分组成的过程。第一步是通过woocommerce_add_cart_item过滤器将订单添加到购物车时更改定价的运行时间显示。第二部分是通过woocommerce_get_cart_item_from_session过滤器设置在结帐期间读取的持久会话数据。这似乎比挂钩计算总计过滤器(比如woocommerce_before_calculate_totals)要快,因为它们在WooCommerce中非常频繁地运行。

更多细节在这里: woocommerce change price while add to cart

+0

是否有可能将每个产品的定制价格添加到购物车中,而不是重复添加购物车产品? –

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']; 
    } 
} 
1

对于从Google获得的感冒球。上面现在被弃用,因为我发现更新到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

我已经试过的人以上所有代码示例和最新的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); 
    } 
} 
+0

试试我上面的例子。 – danyo

+0

该选项对我无效。 –

+0

你有没有试过确切的代码?我有一个安装了1000年的高级活动插件。你安装了哪个版本的WooCommerce? – danyo

6

使用set_price($ price)函数添加到购物车后,更新woocommerce版本3.0.0产品的价格。这个例子给出如下:

add_action('woocommerce_before_calculate_totals', 'mj_custom_price'); 

function mj_custom_price($cart_object) { 
    $woo_ver = WC()->version; 
    $custom_price = 10; 
    foreach ($cart_object->cart_contents as $key => $value) 
    { 
     if($woo_ver < "3.0.0" && $woo_ver < "2.7.0") 
     { 
      $value['data']->price = $custom_price; 
     } 
     else 
     { 
      $value['data']->set_price($custom_price); 
     } 
    }    
} 

非常感谢

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); 
    } 
} 
相关问题