How to Add a Custom Price Field in a WooCommerce Product?

How to Add a Custom Price Field in a WooCommerce Product
955 Views
0
(0)

What is the purpose of this code?

The purpose of this code is to add a hidden input field to the product page. This can be used for many things, but in our case, it’s used to get a custom price from an external API and then use that as the price on checkout.

First, for testing purposes, we add a price in the hidden input field as you don’t give the code that calculates the price:

<?php
add_action( 'woocommerce_before_add_to_cart_button', 'cxc_custom_hidden_product_field', 11 );
function cxc_custom_hidden_product_field() {
	echo '<input type="hidden" id="hidden_field" name="custom_price" class="custom_price" value="20">'; // Price is 20 for testing
}
?>

Then you will use the following to change the cart item price (WC_Session is not needed). The code goes into the function.php file of your active child theme (or active theme). 

<?php
add_filter( 'woocommerce_add_cart_item_data', 'cxc_save_custom_fields_data_to_cart', 10, 2 );
function cxc_save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {

	if( isset( $_POST['custom_price'] ) && ! empty( $_POST['custom_price'] )  ) {
        // Set the custom data in the cart item
		$cart_item_data['custom_price'] = (float) sanitize_text_field( $_POST['custom_price'] );

        // Make each item as a unique separated cart item
		$cart_item_data['unique_key'] = md5( microtime().rand() );
	}

	return $cart_item_data;
}

add_action( 'woocommerce_before_calculate_totals', 'cxc_change_cart_item_price', 99, 1 );
function cxc_change_cart_item_price( $cart ) {

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

	if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ){
		return;
	}
    // Loop through cart items
	foreach ( $cart->get_cart() as $cart_item ) {
        // Set the new price  		
		if( isset($cart_item['custom_price']) ){
			$cart_item['data']->set_price( $cart_item['custom_price'] );
		}
	}
}
?>

It’s unfortunate that you’ve read my blog and still don’t know where to place this sort of code. Then try your existing theme’s functions.php.

How useful was this blog?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this blog.

As you found this blog useful...

Follow us on social media!

We are sorry that this blog was not useful for you!

Let us improve this blog!

Tell us how we can improve this blog?

Leave a comment

Your email address will not be published. Required fields are marked *