I am trying to declare a custom fee in the amount of the order at checkout. I added a checkbox in woocommerce
add_action( 'woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout' ); function add_box_option_to_checkout( $checkout ) { echo '<div id="message_fields">'; woocommerce_form_field( 'add_gift_box', array( 'type' => 'checkbox', 'class' => array('add_gift_box form-row-wide'), 'label' => __('Ilość pudełek ozdobnych - 25 PLN/szt'), 'placeholder' => __(''), ), $checkout->get_value( 'add_gift_box' )); }
Includes a custom js file that handles the event
jQuery( document ).ready(function( $ ) { $('#add_gift_box').click(function(){ var data = { action: 'woocommerce_add_gift_box', state: '200', }; jQuery.ajax({ type: 'POST', url: wc_checkout_params.ajax_url, data: data, success: function (code) { console.log(code); jQuery('body').trigger('update_checkout'); }, dataType: 'html' }); }); });
And php payment processing function
function woo_add_cart_fee( $data ){ if ( is_admin() && ! defined( 'DOING_AJAX' ) || ! $_POST ) return; $extracost = 0; if (isset($_POST['state'])) { $extracost = intval($_POST['state']); } WC()->cart->add_fee( 'Ozdobne pudełka:', $extracost ); } add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' ); add_action('wp_ajax_woocommerce_add_gift_box', 'woo_add_cart_fee', 10); add_action('wp_ajax_nopriv_woocommerce_add_gift_box', 'woo_add_cart_fee', 10);
For some reason, the value of $ _POST ['state'] has not been added, the function works when I give a hard coded value, I tried many options, but I can not make it work.
I saw similar notes, but none of them answered.
jquery ajax php wordpress woocommerce
adam
source share