i just implemented a custom shipping solution.
It depends on the total price of items in the cart. For example:
if total is < 20 -> display free shipping
if total is >= 20 -> paid delivery
But i have a problem with woocommerce cache...I think that the fact is that woocommerce caches shipping rates, not taking in account order qty change. So is the problem is with the calculate_shipping_for_package() method?
If I enable shipping debug mode everything works just right, without it got no updates.
I tried to disable cache, without success with.
add_action('woocommerce_checkout_update_order_review', function() {
$packages = WC()->cart->get_shipping_packages();
foreach ($packages as $key => $value) {
$shipping_session = "shipping_for_package_$key";
unset(WC()->session->$shipping_session);
}
}, 10, 2);
So. Do you ever had this kind of problem? How did you solve? Thanks a lot for any help!
Updated: There is some mistakes in your code, instead try the following:
add_action('woocommerce_checkout_update_order_review', 'checkout_update_refresh_shipping_methods', 10, 1);
function checkout_update_refresh_shipping_methods( $post_data ) {
$packages = WC()->cart->get_shipping_packages();
foreach ($packages as $package_key => $package ) {
WC()->session->set( 'shipping_for_package_' . $package_key, false ); // Or true
}
}
Code goes in function.php file of your active child theme (active theme). Tested and works.
But it will refresh shipping methods cache each time on ajax checkout update event.
Related: Custom checkout field and shipping methods ajax interaction in Woocommerce 3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With