WooCommerce:使用价格覆盖将产品添加到购物车?
Posted
技术标签:
【中文标题】WooCommerce:使用价格覆盖将产品添加到购物车?【英文标题】:WooCommerce: Add product to cart with price override? 【发布时间】:2012-09-01 21:03:08 【问题描述】:$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");
以上代码将产品256
添加到购物车1
时间。但我遇到的问题是我希望能够完全覆盖产品价格......据我所知,我唯一能做的就是将优惠券应用于购物车。
有没有办法将价格完全覆盖为完全定制的东西?
【问题讨论】:
检查此链接非常有用cloudways.com/blog/change-woocommerce-price-display 【参考方案1】:这是在购物车中覆盖产品价格的代码
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);
希望对你有用...
【讨论】:
非常感谢!您对 WooCommerce 有相当多的经验吗? 这会更新购物车。但仍然在顶部的快速购物车图标中显示实际产品价格。有钩子吗? 是的,确实适用于变体。使用 $cart_object->cart_contents[$key]['variation']['variation-name'] ,因为没有变体的“set”方法 看来这两个答案应该结合起来。 抱歉唠叨,但这似乎不适用于最新版本的 Woo Commerce(当前为 3.0.4)。我不得不使用$value['data']->set_price($custom_price);
,因为WC_Product_Simple
的内部运作似乎发生了变化。【参考方案2】:
您需要在上面的代码中引入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);
只有该产品会以覆盖价格添加,其他添加到购物车的产品将被忽略以覆盖价格。
希望这会有所帮助。
【讨论】:
如何根据用户输入设置自定义价格?此自定义价格是硬编码的。有什么建议?类似函数 add_custom_price($cart_object, $custom_price) 如何动态获取点击添加到购物车按钮的产品的目标产品id? 看来这两个答案应该结合起来。 @ratnakar-Ratnakar-Store-Apps 您的代码添加了产品,但是当转到购物车页面时,它的价格会重置 @AbhishekKumar 你有没有找到那些 id 的方法?我想为添加的每个产品添加自定义价格【参考方案3】:我已经尝试了上述所有代码示例,最新的 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);
【讨论】:
试试我上面的例子。 你试过准确的代码了吗?我在一个安装了 1000 次的实时高级插件中运行了这个。您安装了哪个版本的 WooCommerce? 最新版本 WP 版本 4.7.3 和 woocommerce 3.0.1【参考方案4】:woocommerce 3.0.0 版发布后,使用 set_price($price) 函数将产品价格更新为添加到购物车。示例如下:
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);
非常感谢
【讨论】:
【参考方案5】:对于 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);
【讨论】:
【参考方案6】:对于从 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 2.5,我发现这是一个由两部分组成的过程。第一步是在通过 woocommerce_add_cart_item 过滤器添加到购物车时更改定价的运行时显示。第二部分是设置通过 woocommerce_get_cart_item_from_session 过滤器在结帐期间读取的持久会话数据。这似乎比挂钩计算总计过滤器(例如 woocommerce_before_calculate_totals)更快,因为它们在 WooCommerce 中运行得非常频繁。
更多细节在这里: woocommerce change price while add to cart
【讨论】:
是否可以在购物车中添加每个产品的自定义价格,而不是迭代添加的购物车产品?【参考方案8】:我就是这样做的,首先我将自定义价格添加到 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'];
【讨论】:
嗨,你在哪里使用 add_donation_to_cart 功能?【参考方案9】:要使其动态化(分别覆盖购物车中每个商品的价格),您需要使用 woocommerce_add_to_cart
挂钩将覆盖产品价格保存在会话中,并将购物车项目密钥作为会话密钥。
通过使用这些会话值,您可以计算正确的购物车总数,并使更改后的价格也出现在订单项目中
【讨论】:
【参考方案10】:你可以使用下面的
add_filter( 'woocommerce_cart_item_price', 'kd_custom_price_message' );
function kd_custom_price_message( $price )
$textafter = ' USD';
return $price . $textafter;
【讨论】:
以上是关于WooCommerce:使用价格覆盖将产品添加到购物车?的主要内容,如果未能解决你的问题,请参考以下文章
添加将更改 Woocommerce 简单产品中价格的选择字段
将变化价格添加到Woocommerce中的变量产品下拉项目名称