Access our premium support and let us know your problems, we will help you solve them.

0
No products in the cart.
  • This topic is empty.
Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #10015
    blankdcolumbus
    Participant
    $replace_order = new WC_Cart();
    $replace_order->empty_cart( true );
    $replace_order->add_to_cart( "256", "1");
    

    The above code add product 256 to the Cart 1 time. But the issue I’m having is that I want to be able to completely override the product price… as far as I can tell, the only thing I can do it apply a coupon to the Cart.

    Is there a way to completely override the price to something totally custom?

    #10025

    Here is the code for overriding price of product in cart

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

    Hope it will be useful…

    #10024

    You need to introduce an if statement for checking product id, in above code:

    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;
            }
            */
        }
    }
    

    Add this code anywhere and make sure that this code is always executable.

    After adding this code, when you’ll call:

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

    Only this product will be added with overridden price, other products added to cart will be ignored for overriding prices.

    Hope this will be helpful.

    #10016
    blanksark
    Participant

    To make it dynamic ( override price for each item in cart separately ), you need to save the override product price in session with cart item key as session key using woocommerce_add_to_cart hook.

    by using these session values you can calculate correct Cart Total and make the altered price appear in the Order Item as well

    #10018
    blanklance-cleveland
    Participant

    With WooCommerce 2.5 I found this to be a 2-part process. The first step is to change the run-time display of pricing when added to the cart via the woocommerce_add_cart_item filter. The second part is to set the persistent session data which is read during checkout via the woocommerce_get_cart_item_from_session filter. This seems to be faster than hooking the calculate totals filters (such as woocommerce_before_calculate_totals) as they are run very frequently in WooCommerce.

    More details here:
    woocommerce change price while add to cart

    #10019
    blanktobros91
    Participant

    This is how i did it, first i add my custom price to cart_item_data witch can save custom data to cart items, then i use woocommerce_before_calculate_totals, loop the cart and add the previously added price.

    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'];
        }
    }
    
    #10020
    blankdanyo
    Participant

    For eveeryone that got here from Google. The above is now deprecated as i found out updating to WooCommerce 3.0.1.

    Instead of the above you now need to use set_price instead of price

    Here is an example:

    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;
        }
    }
    

    I hope this helps people in the future 🙂

    #10023
    blanksaran
    Participant

    I have tried all above code samples and latest woocommerce 3.0 is not support any of the above example. Use below code and working perfectly for me.

    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);   
        }
    }
    
    #10022
    blankmohd-jafar
    Participant

    After release of woocommerce version 3.0.0 product price is update on add to cart using set_price($price) function. The example is given as below :

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

    Many Thanks

    #10021
    blanksumon-cse-sust
    Participant

    For the WordPress and Woocommerce latest version,Please use like this

    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); 
        }
    }
    
    #10017
    blankshrddha-patel
    Participant

    You can use the following

    add_filter( 'woocommerce_cart_item_price', 'kd_custom_price_message' );
    
    function kd_custom_price_message( $price ) {
    
            $textafter = ' USD'; 
            return $price . $textafter;
    }
    
Viewing 11 posts - 1 through 11 (of 11 total)
  • You must be logged in to reply to this topic.