In Woocommerce, I used jQuery
to calculate a custom price on a single product pages, and now need to pass this value to the cart.
The desired behavior is to pass the new price retrieved from the hidden field to the cart item price.
Here is my actual code:
// Hidden input field in single product page
add_action( 'woocommerce_before_add_to_cart_button', 'custom_hidden_product_field', 11, 0 );
function custom_hidden_product_field() {
echo '<input type="hidden" id="hidden_field" name="custom_price" class="custom_price" value="">';
}
// The code to pass this data to the cart:
add_action( 'woocommerce_add_cart_item_data', 'save_custom_fields_data_to_cart', 10, 2 );
function save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {
if( ! empty( $_REQUEST['custom_price'] ) ) {
// Set the custom data in the cart item
$cart_item_data['custom_data']['custom_price'] = $_REQUEST['custom_price'];
$data = array( 'custom_price' => $_REQUEST['custom_price'] );
// below statement make sure every add to cart action as unique line item
$cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() );
WC()->session->set( 'custom_data', $data );
}
return $cart_item_data;
}
And check both $data
and $cart_item_data
to see that they both return the custom_price
data that is calculated on the page.
However, I go to view cart, and the value of the line item is still 0.
I set a var
equal to the WC()->session->set( 'custom_data', $data );
and then var_dump
to check it, but this returns NULL
which might just be what it returns, I'm not entirely sure because I've never used it.
I should also add that I have the regular_price
in the product backend set to 0. When I erase this (and leave it blank) I get back the error:
Warning: A non-numeric value encountered in C:\xampp\htdocs\my-transfer-source\wp-content\plugins\woocommerce\includes\class-wc-discounts.php on line 85
I'm wondering if I've missed something here, and if someone could lend some light onto this? Thanks
First for testing purpose we add a price in the hidden input field as you don't give the code that calculate the price:
Then you will use the following to change the cart item price (
WC_Session
is not needed):Code goes in function.php file of your active child theme (or active theme). Tested and works.
Related: Woocommerce set_quantity crashes site when adding products to cart