Refresh cached shipping methods on checkout update ajax event in Woocommerce
Asked Answered
P

1

5

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!

Parity answered 5/11, 2018 at 10:14 Comment(1)
Difficult to answer to this question with the few provided code. We don't know how your shipping method customizations are done and what it's involved in it. So you should need to provide all related code as with the provided code, it's not testable.Vikki
V
10

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

Vikki answered 5/11, 2018 at 10:29 Comment(6)
Thanks, will test immediatelly!Parity
I think both will work, it checks if it's array. class-wc-shipping.php:324Parity
Yeah working on it. Seem like the problem is with items quatity not updating rather than cache... .-. I'm using WC()->cart->get_cart() inside calculate_shippingParity
@Parity add your functions code in your question please, as actually nobody can helps more than that.Vikki
Sure, i will do it ASAP. Probably 2-3hours from now.Parity
@Parity So what was it? I am curious…Vikki

© 2022 - 2024 — McMap. All rights reserved.