WooCommerce - Adding a custom price to each product in cart

10,381

Update: For WooCommerce 3.0+ Change cart item prices in WooCommerce version 3.0

You can use woocommerce_before_calculate_totals hook to customize your cart items prices.

You can define $framed_price variables as global in your function, this way.

This is the code:

// getting your additional price outside the function (making any conditional calculations) 
$framed_price = 20;

add_action( 'woocommerce_before_calculate_totals', 'add_custom_total_price', 10 );
function add_custom_total_price( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    global $framed_price;

    foreach ( $cart_object->get_cart() as $key => $value ) {
        $value['data']->price += $framed_price;
    }
}

Or get your custom price inside the hooked function (optionally, depending on how you get your custom price):

add_action( 'woocommerce_before_calculate_totals', 'add_custom_total_price', 10 );
function add_custom_total_price( $cart_object ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $framed_price = 20;

    foreach ( $cart_object->get_cart() as $key => $value ) {
        $value['data']->price += $framed_price;
    }
}

This code is tested and working.

Naturally this code goes on function.php file of your active child theme (or theme) or in any plugin file.

Reference: WooCommerce Cart - Dynamic Price variable pass into custom price hook

Share:
10,381
Habib Rehman
Author by

Habib Rehman

High level Compiler loves Sublime editor, Proficient with php codeigniter. Likes to stay at the backend whether its dawn or dust

Updated on June 04, 2022

Comments

  • Habib Rehman
    Habib Rehman almost 2 years

    I would like to update the price of products adding a custom price in cart using this simple piece of code update_post_meta( $product->id, '_regular_price', $frame_price_added);.

    Note: what I'm trying to achieve is to add this custom price to each product in cart.

    I have try to get $frame_price_added this way:

    $frame_price = $res['_number_field'][0];
    $frame_price_added = $product->price + $frame_price;
    

    Here $product->price is price coming from woocomerce product and $frame_price is coming from my newly added price.

    I was wondering how do I associate this new price to cart, because it doesn't work.

    I have tried using update_post_meta( $product->id, '_price', $frame_price_added); and when page is refreshed it adds and stores the custom price to the product, and saved it.

    Any idea on how I can achieve this properly?

    Thanks.


    Edit: One more thing… I have searched a function that can being called on add to cart and i didn't find any thing, and also an action hook being called on woocommerce_template_single_add_to_cart which had woocommerce_single_product_summary but it didn't find any function.

  • Sona
    Sona about 7 years
    how i can get the $framed_price from my form ? i don't want it to be static
  • LoicTheAztec
    LoicTheAztec about 7 years
    @sona what do you exactly mean/want? what form, what field?