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

时间:2012-09-08 01:13:32

标签: php wordpress class woocommerce

$replace_order = new WC_Cart();
$replace_order->empty_cart( true );
$replace_order->add_to_cart( "256", "1");

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

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

9 个答案:

答案 0 :(得分: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);
    }
}

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

答案 1 :(得分: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;
        }
        */
    }
}

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

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

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

只有这个产品才会被覆盖价格,添加到购物车的其他产品将被忽略,价格优先。

希望这会有所帮助。

答案 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);   
    }
}

答案 3 :(得分:3)

对于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); 
    }
}

答案 4 :(得分:1)

要使其动态化(单独覆盖购物车中每件商品的价格),您需要使用woocommerce_add_to_cart挂钩将购物车商品密钥作为会话密钥保存在会话中。

通过使用这些会话值,您可以计算正确的购物车总数,并使更改的价格也显示在订单商品中

答案 5 :(得分:1)

使用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

答案 6 :(得分:1)

对于从谷歌来到这里的eveeryone。以上现已弃用,因为我发现更新到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 :(得分:0)

我就是这样做的,首先我将自定义价格添加到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'];
    }
}

答案 8 :(得分:0)

add_filter('woocommerce_cart_item_price','kd_custom_price_message');

函数kd_custom_price_message($ price){

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

}