$replace_order = new WC_Cart();
$replace_order->empty_cart(true);
$replace_order->add_to_cart("256", "1");
上述代码将产品256
添加到购物车1
时间。但我遇到的问题是,我希望能够完全覆盖产品价格......据我所知,我唯一能做的就是将优惠券应用于购物车。WooCommerce:将产品添加到价格优先的购物车?
有没有办法将价格完全覆盖到完全自定义的东西?
$replace_order = new WC_Cart();
$replace_order->empty_cart(true);
$replace_order->add_to_cart("256", "1");
上述代码将产品256
添加到购物车1
时间。但我遇到的问题是,我希望能够完全覆盖产品价格......据我所知,我唯一能做的就是将优惠券应用于购物车。WooCommerce:将产品添加到价格优先的购物车?
有没有办法将价格完全覆盖到完全自定义的东西?
这里是覆盖产品的价格在购物车
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);
}
}
希望这将是有用的代码...
您需要引入一个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);
只有这款产品将覆盖的价格被添加,其他产品加入购物车的覆盖价格将被忽略。
希望这会有所帮助。
要使其成为动态的(分别替代购物车中的每件商品的价格),您需要使用woocommerce_add_to_cart
钩子将购物车商品密钥中的优先商品价格保存为会话密钥。
通过使用这些会话值就可以计算出正确的车总计并作出改变价格出现在订单项目以及
您可以参考以下guide用一个例子完整的详细信息。
随着WooCommerce 2.5我发现这是一个由2部分组成的过程。第一步是通过woocommerce_add_cart_item过滤器将订单添加到购物车时更改定价的运行时间显示。第二部分是通过woocommerce_get_cart_item_from_session过滤器设置在结帐期间读取的持久会话数据。这似乎比挂钩计算总计过滤器(比如woocommerce_before_calculate_totals)要快,因为它们在WooCommerce中非常频繁地运行。
是否有可能将每个产品的定制价格添加到购物车中,而不是重复添加购物车产品? –
这是我怎么做到的,首先我加我的定制价格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'];
}
}
对于从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;
}
}
我希望这有助于在未来:)
我已经试过的人以上所有代码示例和最新的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);
}
}
使用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);
}
}
}
非常感谢
对于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);
}
}
检查这个环节非常有益的https://www.cloudways .com/blog/change-woocommerce-price-display/ – Sourabh