Refresh cart_fragments(mini-cart) by PHP or jQuery?

Im trying to update the mini-cart (cart_fragments) after/on an ajax event. It works like this.

HTML Trigger:

Read More
<a id="woomps-button-'.$nr.'" class="woomps-button" '.$ajax_url.' data-button-nr="'.$nr.'">

jQuery request:

jQuery( document ).on('click', '.woomps-button', function() {
    var nr= jQuery(this).data('button-nr');
    jQuery.ajax({
        url : subpost.ajax_url,
        type : 'post',
        data : {
            action : 'woomps_update_nr',
            security : subpost.security,
            nr: nr
        },
        success : function( response ) {
            window.alert(nr);
            //MAYBE_code to refresh_fragments here
            }
    });
    return false;
});

PHP responder:

function woomps_update_choosen_person () {
    $p = $_POST['nr'];
    if ($p == 1) {$x= "This must show in cart";}
    WC()->session->set( 'woomps_limit_by_persons' , $x );

    //MAYBE code to refresh_fragments here
}

And in the mini-cart.php template i have a calculation based on this field.

$items_left_start = WC()->session->get( 'woomps_limit_by_persons' )?: 3 ;
//Do something something here

So this works, except I need to refresh the cart like when an item is added to cart. My assumption is that is should be an ajax request from jQuery that i can put in the success block?

The class i (think) I want to fire is this WC_AJAX::get_refreshed_fragments(); But this is fired from an an add_action, so i tried this add_action( 'wp_ajax_nopriv_woocommerce_get_refreshed_fragments', array( 'WC_AJAX', 'get_refreshed_fragments' ) );. But it did not work either.

I also try to create an jQuery ajax call like it does in the add_to_cart button, but it neither worked.

//MAYBE_code to refresh_fragments here
        var data = {};
        jQuery.post(
            wc_get_refreshed_fragments_params.wc_ajax_url.toString().
            replace( '%%endpoint%%', 'get_refreshed_fragments' ), data,
            function( response ){

            })

        }

I do not completely understand how this works, if anyone have some pointers or a snippet i would so much appriciate it. Been struggeling with this for some time now.

Related posts

1 comment

  1. After much struggeling this topic on stack helped create the correct code to update mini cart fragments. It was both PHP and jQuery neeeded.

    So basically you can call the WC_AJAX::get_refreshed_fragments() at the end of your PHP coode responder; if it comes from an AJAX call. It will not return to your PHP responder code so put it at the end. The PHP respons will end/sent back to jQuery inside the WC_AJAX::get_refreshed_fragments(); so you also need to create some jQuery that responds to this. This i got from the topic:

     var fragments = response.fragments;
    
     if ( fragments ) {
    
                    jQuery.each(fragments, function(key, value) {
                        jQuery(key).replaceWith(value);
                    });
    
                }
    

Comments are closed.