WooCommerce:通过价格优惠将产品添加到购物车?

dco*_*bus 36 php wordpress class woocommerce

$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");
Run Code Online (Sandbox Code Playgroud)

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

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

Rat*_*pps 51

这是购物车中产品价格的最高代码

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

希望它会有用......

  • 这会更新购物车.但仍然在顶部的快速购物车图标中显示实际产品价格.有钩子吗? (5认同)
  • 似乎应该将这两个答案结合起来. (2认同)
  • 抱歉唠叨,但这似乎不适用于最新版本的Woo Commerce(目前为3.0.4).我不得不使用`$ value ['data'] - > set_price($ custom_price);`因为看起来`WC_Product_Simple`的内部工作已经改变了. (2认同)

Rat*_*pps 43

您需要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;
        }
        */
    }
}
Run Code Online (Sandbox Code Playgroud)

在任何地方添加此代码,并确保此代码始终可执行.

添加此代码后,您将致电:

global $woocommerce; 
$woocommerce->cart->add_to_cart(598);
Run Code Online (Sandbox Code Playgroud)

只有这个产品才会被覆盖的价格被添加,添加到购物车的其他产品将被忽略以获得最高价格.

希望这会有所帮助.

  • 似乎应该将这两个答案结合起来. (2认同)

小智 12

我已经尝试了以上所有代码示例和最新的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);   
    }
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*far 6

在发布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);
       }
   }            
}
Run Code Online (Sandbox Code Playgroud)

非常感谢