WooCommerce:使用价格覆盖将产品添加到购物车?

Posted

技术标签:

【中文标题】WooCommerce:使用价格覆盖将产品添加到购物车?【英文标题】:WooCommerce: Add product to cart with price override? 【发布时间】:2012-09-01 21:03:08 【问题描述】:
$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");

以上代码将产品256 添加到购物车1 时间。但我遇到的问题是我希望能够完全覆盖产品价格......据我所知,我唯一能做的就是将优惠券应用于购物车。

有没有办法将价格完全覆盖为完全定制的东西?

【问题讨论】:

检查此链接非常有用cloudways.com/blog/change-woocommerce-price-display 【参考方案1】:

这是在购物车中覆盖产品价格的代码

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;
        // for WooCommerce version 3+ use: 
        // $value['data']->set_price($custom_price);
    

希望对你有用...

【讨论】:

非常感谢!您对 WooCommerce 有相当多的经验吗? 这会更新购物车。但仍然在顶部的快速购物车图标中显示实际产品价格。有钩子吗? 是的,确实适用于变体。使用 $cart_object->cart_contents[$key]['v​​ariation']['variation-name'] ,因为没有变体的“set”方法 看来这两个答案应该结合起来。 抱歉唠叨,但这似乎不适用于最新版本的 Woo Commerce(当前为 3.0.4)。我不得不使用$value['data']->set_price($custom_price);,因为WC_Product_Simple 的内部运作似乎发生了变化。【参考方案2】:

您需要在上面的代码中引入if 语句来检查产品ID:

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) 
    $custom_price = 10; // This will be your custome price  
    $target_product_id = 598;
    foreach ( $cart_object->cart_contents as $value ) 
        if ( $value['product_id'] == $target_product_id ) 
            $value['data']->price = $custom_price;
        
        /*
        // If your target product is a variation
        if ( $value['variation_id'] == $target_product_id ) 
            $value['data']->price = $custom_price;
        
        */
    

将此代码添加到任何位置并确保此代码始终可执行。

添加此代码后,何时调用:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598);

只有该产品会以覆盖价格添加,其他添加到购物车的产品将被忽略以覆盖价格。

希望这会有所帮助。

【讨论】:

如何根据用户输入设置自定义价格?此自定义价格是硬编码的。有什么建议?类似函数 add_custom_price($cart_object, $custom_price) 如何动态获取点击添加到购物车按钮的产品的目标产品id? 看来这两个答案应该结合起来。 @ratnakar-Ratnakar-Store-Apps 您的代码添加了产品,但是当转到购物车页面时,它的价格会重置 @AbhishekKumar 你有没有找到那些 id 的方法?我想为添加的每个产品添加自定义价格【参考方案3】:

我已经尝试了上述所有代码示例,最新的 woocommerce 3.0 不支持上述任何示例。使用下面的代码并为我完美地工作。

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) 
    $custom_price = 10; // This will be your custom price  
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) 
        $cart_item['data']->set_price($custom_price);   
    

【讨论】:

试试我上面的例子。 你试过准确的代码了吗?我在一个安装了 1000 次的实时高级插件中运行了这个。您安装了哪个版本的 WooCommerce? 最新版本 WP 版本 4.7.3 和 woocommerce 3.0.1【参考方案4】:

woocommerce 3.0.0 版发布后,使用 set_price($price) 函数将产品价格更新为添加到购物车。示例如下:

add_action( 'woocommerce_before_calculate_totals', 'mj_custom_price' );

function mj_custom_price( $cart_object ) 
   $woo_ver = WC()->version; 
   $custom_price = 10;
   foreach ( $cart_object->cart_contents as $key => $value )
   
       if($woo_ver < "3.0.0" && $woo_ver < "2.7.0")
       
           $value['data']->price = $custom_price;
       
       else
       
           $value['data']->set_price($custom_price);
       
               

非常感谢

【讨论】:

【参考方案5】:

对于 Wordpress 和 Woocommerce 最新版本,请这样使用

add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart_object ) 
    foreach ( $cart_object->cart_contents as $key => $value ) 
        $custom_price = 5;
        $value['data']->set_price($custom_price); 
    

【讨论】:

【参考方案6】:

对于从 Google 来到这里的每个人。由于我发现更新到 WooCommerce 3.0.1,因此不推荐使用上述内容。

您现在需要使用set_price 而不是price,而不是上面的方法

这是一个例子:

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']->set_price = $custom_price;
    

我希望这对将来的人们有所帮助:)

【讨论】:

【参考方案7】:

对于 WooCommerce 2.5,我发现这是一个由两部分组成的过程。第一步是在通过 woocommerce_add_cart_item 过滤器添加到购物车时更改定价的运行时显示。第二部分是设置通过 woocommerce_get_cart_item_from_session 过滤器在结帐期间读取的持久会话数据。这似乎比挂钩计算总计过滤器(例如 woocommerce_before_calculate_totals)更快,因为它们在 WooCommerce 中运行得非常频繁。

更多细节在这里: woocommerce change price while add to cart

【讨论】:

是否可以在购物车中添加每个产品的自定义价格,而不是迭代添加的购物车产品?【参考方案8】:

我就是这样做的,首先我将自定义价格添加到 cart_item_data 女巫可以将自定义数据保存到购物车项目,然后我使用 woocommerce_before_calculate_totals,循环购物车并添加之前添加的价格。

function add_donation_to_cart()  

    $cart_item_data = array('price' => $_REQUEST['donate_amount']);
    $woocommerce->cart->add_to_cart( 5395, 1, '', array(), $cart_item_data);



add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );

function add_custom_price( $cart ) 
    foreach ( $cart->cart_contents as $key => $value ) 
        $value['data']->price = $value['price'];
    

【讨论】:

嗨,你在哪里使用 add_donation_to_cart 功能?【参考方案9】:

要使其动态化(分别覆盖购物车中每个商品的价格),您需要使用 woocommerce_add_to_cart 挂钩将覆盖产品价格保存在会话中,并将购物车项目密钥作为会话密钥。

通过使用这些会话值,您可以计算正确的购物车总数,并使更改后的价格也出现在订单项目中

【讨论】:

【参考方案10】:

你可以使用下面的

add_filter( 'woocommerce_cart_item_price', 'kd_custom_price_message' );

function kd_custom_price_message( $price ) 

        $textafter = ' USD'; 
        return $price . $textafter;

【讨论】:

以上是关于WooCommerce:使用价格覆盖将产品添加到购物车?的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce 更新结帐 ajax

添加将更改 Woocommerce 简单产品中价格的选择字段

将变化价格添加到Woocommerce中的变量产品下拉项目名称

使用 WooCommerce 选择变体时更新产品页面上的价格

在 Woocommerce 存档页面上的产品价格后添加图标

如果 Woocommerce 产品价格为零,则显示联系按钮,否则显示添加到购物车按钮