Woocommerce:根据用户输入自定义价格

2022-08-30 23:35:58

我不想在这里发帖,但我找不到我正在寻找的答案,我没有足够的声誉来评论其他非常相似的问题以获得我的确切答案。

我从这篇文章中找到了一个近乎完美的答案: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;
      }
 }

它的工作原理很棒...如果您设置了硬编码的自定义价格。

我的问题是:如何根据用户输入设置自定义价格?

我已经尝试了所有我能想到的方法来传递信息(我甚至尝试过使用cookie,globals,sessions),但没有一个按照我想要的方式工作,所有这些方法充其量都是黑客。

有问题的特定产品是捐赠,客户希望用户能够设置捐赠价格(而不仅仅是创建具有设置价格点的可变产品)。

在捐赠页面上,当用户提交捐赠表单时,我将捐赠产品添加到购物车中,如下所示:

$donation_success = $woocommerce->cart->add_to_cart($donation_id); 

我的捐赠产品的设定价格为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);
        }
    }
}

提前感谢任何有用的建议!


答案 1

我找到了一个不优雅但适合我的目的的解决方案。

我之前尝试过使用cookie,但我没有设置cookie路径,因此它仅适用于设置它的页面。

我现在用捐赠价格设置一个饼干:

setcookie("donation", $_GET['donation'], 0, "/");

然后我像这样设定价格:

add_action( 'woocommerce_before_calculate_totals', 'woo_add_donation');

function woo_add_donation() {
    global $woocommerce;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        if($cart_item['data']->id == 358 && ! empty($_COOKIE['donation'])){
            $cart_item['data']->set_price($_COOKIE['donation']);
        }
    }
}

答案 2

我一直在寻找完全相同的东西。我发现这个WooCommerce插件(不是免费的)

命名您的价格插件

最初,我不确定使用什么搜索词来查找这样的插件,但看起来“WooCommerce命名您的价格”会显示指向其他类似插件来源的链接。


推荐