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 hadwoocommerce_single_product_summary
but it didn't find any function.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With