Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 527
Habib Rehman Avatar asked Sep 18 '25 05:09

Habib Rehman


1 Answers

Updated (since WooCommerce 3+)

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 ) {

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

    global $framed_price;

    foreach ( $cart->get_cart() as $item ) {
        $item['data']->set_price( $item['data']->get_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 ) {

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

    $framed_price = 20;

    foreach ( $cart->get_cart() as $item ) {
        $item['data']->set_price( $item['data']->get_price() + $framed_price );
    }
}

The code is tested.

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


Important note

You might need to use additionally woocommerce_cart_item_price like in this more recent thread, for Cart and Mini cart displayed item prices.


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

like image 132
LoicTheAztec Avatar answered Sep 19 '25 21:09

LoicTheAztec