-
-
Save neamtua/bfdc4521f5a1582f5ad169646f42fcdf to your computer and use it in GitHub Desktop.
| <script type="text/javascript"> | |
| /* in order to update info on your checkout page you need to trigger update_checkout function | |
| so add this in your javascript file for your theme or plugin | |
| */ | |
| jQuery('body').trigger('update_checkout'); | |
| /* what this does is update the order review table but what it doesn't do is update shipping costs; | |
| the calculate_shipping function of your shipping class will not be called again; | |
| so if you were like me and you made a shipping method plugin and you had to change costs based on payment method then | |
| this is the only way to ensure it does just that | |
| */ | |
| </script> | |
| <?php | |
| # add this in your plugin file and that's it, the calculate_shipping method of your shipping plugin class will be called again | |
| function action_woocommerce_checkout_update_order_review($array, $int) | |
| { | |
| WC()->cart->calculate_shipping(); | |
| return; | |
| } | |
| add_action('woocommerce_checkout_update_order_review', 'action_woocommerce_checkout_update_order_review', 10, 2); | |
| ?> |
Great Great Great (y)
Not working!
not working for me :(
That doesn't work anymore, use add_filter( 'woocommerce_package_rates', 'change_rates', 10, 2 ); instead. Where "change rates" is a function.
Example:
<script type="text/javascript">jQuery('body').trigger('update_checkout');</script>
and
add_filter( 'woocommerce_package_rates', 'change_rates', 10, 2 );
function change_rates( $rates, $packages ) {
foreach ( $rates as $rate ) {
$rate->label = "Delivery";
$rate->cost = 40;
}
return $rates
}
Below code will update Shipping costs immediately when Postcode value changes.
$('#billing_postcode').on('input', function() { $('body').trigger('update_checkout', { update_shipping_method: true }); });
That doesn't work anymore, use
add_filter( 'woocommerce_package_rates', 'change_rates', 10, 2 );instead. Where "change rates" is a function.Example:
<script type="text/javascript">jQuery('body').trigger('update_checkout');</script>
andadd_filter( 'woocommerce_package_rates', 'change_rates', 10, 2 ); function change_rates( $rates, $packages ) { foreach ( $rates as $rate ) { $rate->label = "Delivery"; $rate->cost = 40; } return $rates }
If I instead wish to invoke my custom shipping method to recalculate shipping costs, how do I do that please?
Thanks! This code jQuery('body').trigger('update_checkout'); saved me the time of research 😃
That is not working. In source woocommerce mention to this docs
https://gist.github.com/woogists/271654709e1d27648546e83253c1a813
Put this code to functions.php to solve this
function wc_shipping_rate_cache_invalidation( $packages ) {
foreach ( $packages as &$package ) {
$package['rate_cache'] = wp_rand();
}
return $packages;
}
add_filter( 'woocommerce_cart_shipping_packages', 'wc_shipping_rate_cache_invalidation', 100 );
Thanks @PhongGCS, it really works.

Thank you. This is just what I needed... You helped me a lot.