【发布时间】:2015-11-28 10:43:10
【问题描述】:
我见过很多以客户价格将商品添加到 WC 购物车的示例,但没有一个是动态添加的。我正在尝试在接收 POST 变量的简码函数中做......
if (isset($_POST['wmnf_add_donation'])) {
global $woocommerce;
$cart_object = $woocommerce->cart;
$custom_price = ($_POST['donation_amount'] > 0 ? $_POST['donation_amount'] : 0);
$target_product_id = 65986;
$cart_object->add_to_cart($target_product_id, "1");
foreach ( $cart_object->cart_contents as $key => $value ) {
if ( $value['product_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
}
}
这当然会将商品添加到购物车,但价格为零,我意识到我需要以某种方式将此数组保存回 WC 购物车数据。这种方法是否可行,还是只能通过过滤器或动作挂钩来完成?如果是这样,我如何将更改后的数组保存回购物车内容或使其能够添加具有发布价格的一件商品?非常感谢任何指导。
感谢 doublesharp 的回答,我无法按照描述的那样工作,因为表单是使用包含我的表单的简码发布到页面,而不是直接发布到购物车。没有看到 $_POST 并且产品最终为零。我确实找到了另一种方法,但使用 wp_redirect 时遇到问题。我将上面的简码更改为:
if (isset($_POST['wmnf_add_donation'])) {
global $woocommerce;
$custom_price = ($_POST['donation_amount'] > 0 ? $_POST['donation_amount'] : 0);
$target_product_id = 65986;
$_SESSION['donation_amount'] = $custom_price;
$woocommerce->cart->add_to_cart($target_product_id, "1");
wp_redirect( site_url() . '/gifts/swag-bag/');
}
然后我在functions.php中添加了以下过滤器:
add_filter('woocommerce_get_price','donation_price', 10, 2);
add_filter('woocommerce_get_regular_price','donation_price', 10, 2);
add_filter('woocommerce_get_sale_price','donation_price', 10, 2);
function donation_price($price, $productd){
if($productd->id == '65986'){
$price = $_SESSION['donation_amount'];
}
return $price;
}
这不起作用,除非 wp_redirect 被注释掉,因此,不重定向。以上重定向到购物车,但它是空的。如果我注释掉 wp_redirect 行,然后手动转到购物车,则该产品以我的自定义价格存在。实际上,如果可能的话,我想应用自定义价格并直接重定向到结帐页面而不是购物车?
【问题讨论】:
标签: wordpress woocommerce