php - Clear WooCommerce cart on Currency Switcher change

I'm using the currency switcher WordPress plugin to change currencies on my website, I want the cart to be cleared once I change the currency. I've been trying for some time now, but can't figure out why it isn't working.

This is my source code in the theme functions.php file

    function currency_change_action_callback() {      
    global $woocommerce;
    $url_data=$_POST['url_data'];
     $woocommerce->cart->empty_cart();   
        echo $url_data;
        
    
    die();   
    }
add_action( 'wp_ajax_currency_change_action', 'currency_change_action_callback' );
add_action( 'wp_ajax_nopriv_currency_change_action', 'currency_change_action_callback' );

I've also tried creating a javascript file and calling it to my functions.php file. here are my source codes

app.js

    $('#alg_currency_select').on('change', function () {
    function Clearcart(d){
            jQuery.post(
                "http://localhost/epay/wp-admin/admin-ajax.php", 
                //ajaxurl, 
                {
                    "action": "clearcart",
                    "data":   d.getAttribute("data-product")
                }, 
                function(){
                    window.location = d.getAttribute("data-href");
                }
            );
       
})};

functions.php

    function load_javascript() {
    wp_register_script('custom', get_template_directory_uri().'/app.js', 'jquery', 1, true);
    wp_enqueue_script('custom');
}
add_action('wp_enqueue_scripts', 'load_javascript');

would greatly appreciate it if someone can help me solve the issue of why my cart isn't clearing. thanks.

Answer

Solution:

There are some mistakes in your code and unnecessary things.

In the code below, the jQuery code is now located in a php function and enqueued in WordPress using the WooCommerce wc_enqueue_js() function.

// The jQuery Ajax enqueued code
add_action('template_redirect', 'currency_change_trigger_clear_cart_js' );
function currency_change_trigger_clear_cart_js() {
    wc_enqueue_js( "jQuery( function($){
        $(document.body).on('change', '#alg_currency_select', function() {
            $.ajax({
                url: '" . admin_url('/admin-ajax.php') . "',
                type: 'POST',
                data: {
                    'action': 'currency_change_clear_cart'
                },
                success: function(response) {
                    if( response == 'cleared' ) {
                        $(document.body).trigger('wc_fragment_refresh'); // Refresh cart
                    }
                    // console.log(response);
                }
            });
        });
    });" );
}

// Php AJAX receiver: Empty cart
add_action( 'wp_ajax_currency_change_clear_cart', 'currency_change_clear_cart' );
add_action( 'wp_ajax_nopriv_currency_change_clear_cart', 'currency_change_clear_cart' );
function currency_change_clear_cart() { 
    if( count(WC()->cart->get_cart()) > 0 ) {
        WC()->cart->empty_cart();   
        echo 'cleared';
    }
    die();   
}

Code goes in functions.php file of the active child theme (or active theme). Tested and works.

Source