我不想在这里发帖,但我找不到我想要的答案,而且我没有足够的声誉评论其他非常类似的问题来得到我的确切答案.
我从这篇文章中找到了一个近乎完美的答案: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)
在此先感谢任何有用的建议!