WooCommerce - Adding a custom price to each product in cart

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.

Answers


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


Need Your Help

Storing php sessions in redis as json, read the session

php json node.js session

I'm storing my php sessions in redis as json string to share them with node.js like it is done here:

Selecting items in multi-select listbox from delimited database string field

c# asp.net database listbox multi-select

I'm trying to build an "edit" page for a database record that can be edited and saved back to the database. One of the fields will be a multi-select listbox that will need to highlight the appropri...