Manipulate shipping by passing custom field / trigger
-
I can’t seem to get this to work.
What I’m trying to do is have a checkbox, when a user clicks it, then offer free shipping (and hide all other shipping rates).
My code works when I refresh the page, and it works as needed:
function my_hide_shipping_when_free_is_available( $rates ) { $free = array(); if ( isset( $_POST['post_data'] ) ) { parse_str( $_POST['post_data'], $post_data ); } else { $post_data = $_POST; // fallback for final checkout (non-ajax) } foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->method_id && isset($post_data['customorderfield']) && $post_data['customorderfield'] == 1) { $free[ $rate_id ] = $rate; break; } } if ( isset( $rates['free_shipping:10'] ) ) { unset( $rates['free_shipping:10'] ); } return ! empty( $free ) ? $free : $rates; } add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available' );However, what I’m trying to do is have shipping update by triggering update_checkout.
So I have added this js to trigger a cart update it does work and sends the post fieldadd_action( 'wp_footer', 'woocommerce_sendthis_js' ); function woocommerce_sendthis_js() { if (is_checkout()) { ?> <script type="text/javascript"> jQuery( document ).ready(function( $ ) { jQuery('#mycheckbox').on( 'change', function () { jQuery('body').trigger('update_checkout', { update_shipping_method: true } ); }); }); </script> <?php } }I added this snippet of code to my woocommerce fields:
<input id="mycheckbox" class="input-checkbox update_totals_on_change" type="checkbox" name="customorderfield" value="1" />Again, the shipping updates properly when I refresh the page, but won’t update upon triggering update_checkout, and I’m not sure why. Any ideas?
The topic ‘Manipulate shipping by passing custom field / trigger’ is closed to new replies.