我不想在这里发帖,但我找不到我想要的答案,而且我没有足够的声誉评论其他非常类似的问题来得到我的确切答案.
我从这篇文章中找到了一个近乎完美的答案: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;
}
}
Run Code Online (Sandbox Code Playgroud)
它的效果很好......如果你设置一个硬编码的自定义价格.
我的问题是:如何根据用户输入设置自定义价格?
我已经尝试了各种我能想到的方式来传递信息(我甚至尝试过使用cookie,全局,会话)并且没有一个能够按照我想要的方式工作,所有这些都是最好的,黑客攻击.
有问题的具体产品是捐赠,客户希望用户能够设定捐赠价格(而不是仅仅创建具有设定价格点的可变产品).
在捐赠页面上,当用户提交捐赠表格时,我将捐赠产品添加到购物车中,如下所示:
$donation_success = $woocommerce->cart->add_to_cart($donation_id);
Run Code Online (Sandbox Code Playgroud)
我的捐款产品的定价为0.00,所以当它被添加到购物车时它的价格为0.00(我不知道价格是在此时或之后设定的)
我已经尝试使用add_to_cart方法中的最后一个变量传递信息,该方法接受一个参数数组,但我似乎无法使其工作.
我确信答案很简单,但我已经尝试了几个小时才能做到这一点,我无法让它发挥作用.我没有想法.
我目前使用的实际代码与上述帖子的回答者略有不同,但工作方式基本相同:
add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation');
function woo_add_donation() {
global $woocommerce;
$donation = 10;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
if($cart_item['data']->id == 358 || $cart_item['data']->id == 360){
$cart_item['data']->set_price($donation);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢任何有用的建议!
我们有一堆产品:
我们使用内置挂钩可以购买它们,但购物车仍然0 price在结账时显示它们.
我们希望购物车和结帐摘要显示"特殊订单"或任何其他文字,但似乎WooCommerce使基于文本的价格无效.
试过这个: WooCommerce:用价格覆盖将产品添加到购物车?
以上工作正常,数字覆盖,但尝试使用文本覆盖时,它默认返回显示0 price.
为什么?这些产品是按订单生产的,商店管理员将在与客户/供应商交谈后更新价格.
我有一个产品1€并使用e GET参数在运行时更改价格:
http://url/warenkorb/?add-to-cart=1539&price=18.45
这改变不是篮子里的价格(仍然是1€)
如何实现这一目标.
我使用以下钩子:
add_filter( 'woocommerce_add_cart_item', 'my_woocommerce_add_cart_item', 5, 1 );
function my_woocommerce_add_cart_item( $cart_item ) {
if(get_post_meta( $cart_item['data']->id, 'isConfigurableProduct', true)=='1')
{
if(isset($_GET['price']))
{
$price=$_GET['price'];//keep it simpel for testing
$cart_item['data']->set_price( $price );
$_SESSION[$cart_item['data']->id]=$price;
}
else
{
$cart_item['data']->set_price($_SESSION[$cart_item['data']->id]);
}
}
return $cart_item;
}
Run Code Online (Sandbox Code Playgroud)
谢谢