gpt4 book ai didi

wordpress - Woocommerce 以自定义价格添加到购物车

转载 作者:行者123 更新时间:2023-12-02 22:29:32 26 4
gpt4 key购买 nike

我见过很多使用客户价格将商品添加到 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 购物车数据。这种方法是否可行,或者只能通过过滤器或操作 Hook 来完成?如果是这样,我如何将更改后的数组保存 repo 物车内容或使其能够添加带有发布价格的一件商品?非常感谢任何指导。

<小时/>

感谢 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 行,然后手动转到购物车,则该产品将以我的自定义价格显示。实际上,如果可能的话,我想应用自定义价格并直接重定向到结账页面而不是购物车?

最佳答案

您可以使用woocommerce_before_calculate_totals用于修改购物车内容的操作 Hook ,包括产品价格。

add_action( 'woocommerce_before_calculate_totals', 'before_calculate_totals' );
function before_calculate_totals( $_cart ){
// loop through the cart_contents
foreach ( $_cart->cart_contents as $cart_item_key => &$item ) {
// you will need to determine the product id you want to modify, only when the "donation_amount" is passed
if ( $item['id'] == 65986 && isset( $_POST['donation_amount'] ) ){
// custom price from POST
$custom_price = $_POST['donation_amount'] > 0 ? $_POST['donation_amount'] : 0;

// save to the cart data
$item['data']->price = $custom_price;
// new versions of WooCommerce may require (instead of line above)...
// $item['data']->set_price($custom_price);
}
}
}

关于wordpress - Woocommerce 以自定义价格添加到购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com