当前位置: 首页 > 知识库问答 >
问题:

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

洪涵亮
2023-03-14

我见过很多例子,都是用客户价格将商品添加到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的回答,我无法让它按描述工作,因为表单是用我的快捷码(包含我的表单)发布到页面上的,而不是直接发布到购物车上。没有看到$u帖子,结果该产品为零。我确实找到了另一种方法,但在使用wp_重定向时遇到了问题。我将上述短代码更改为:

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行,然后手动转到购物车,产品就在那里,我的自定义价格。事实上,如果可能的话,我想应用自定义价格并直接重定向到结账页面而不是购物车?

共有1个答案

微生良策
2023-03-14

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

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);
        }
    }
}
 类似资料:
  • 我使用WooCommerce Wordpress中的以下代码,通过一个模板,使用add_to_cart($product_id)功能添加了许多产品。 现在,我希望通过此模板为每个产品添加自定义价格。现在购物车中的价格和数据库中的价格一样,但我想通过这一点添加我的自定义价格。有人能帮我做同样的事吗。谢谢

  • 我已经添加了一个自定义字段,其中有图片帧的额外价格,现在如果图片价格是10$和用户选择一个帧,它将加起来5$让说,总数将是15$。 现在,如果我添加另一个产品,它的选择定制框架价格应该得到添加。e、 g产品1的价格是:10美元,上面选择的框架是:frame1谁的价格是5美元,那么该产品的总价格将是15美元,如果产品2加上价格10美元,选择frame2的价格是6美元,那么该产品的总价格将是16美元,

  • 我使用“从Woocommerce中的functions.php文件中添加到购物车按钮上显示价格”的答案代码,在简单的产品中添加价格。 但我想改进这个功能,动态显示选择的变异价格内按钮。在变体产品页面上使用此代码,它只显示最低的价格。有什么解决办法吗?

  • 我怎么把这两个结合起来?在网上找不到任何东西。

  • 在商品分类页面上,当有人点击“添加到购物车”时,WooCommerce通过Ajax在此按钮下方添加“查看购物车”。我发现处理这个的脚本是 /assets/js/frontend/add-to-cart.js 现在,我想添加"Procceed to check out",这样某人就可以立即去结账。 这是脚本的输出: 有没有人做过类似的事情?

  • 我已安装woocommerce来处理产品输入 商店页面是自定义构建的,允许用户从列表中选择产品并自定义它,根据存储在数据库中的信息以javascript输出价格。 存储在数据库中的产品价值为0.00,因为它们的价格取决于所选择的变量。 我准备传递给wooCommerce的输出数据如下: WC产品ID(与数据库中的产品匹配) 定制价格 自定义图像 自定义说明(例如100mm x 100mm) 生成数