首页 > 解决方案 > 清除货币切换器更改的 WooCommerce 购物车

问题描述

我正在使用货币切换器 WordPress 插件在我的网站上更改货币,我希望在更改货币后清除购物车。我已经尝试了一段时间,但无法弄清楚为什么它不起作用。

这是我在主题functions.php文件中的源代码

    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' );

我还尝试创建一个 javascript 文件并将其调用到我的 functions.php 文件中。这是我的源代码

应用程序.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");
                }
            );
       
})};

函数.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');

如果有人可以帮助我解决我的购物车无法清理的问题,我将不胜感激。谢谢。

标签: phpjqueryajaxwordpresswoocommerce

解决方案


您的代码中有一些错误和不必要的东西。

在下面的代码中,jQuery 代码现在位于 php 函数中,并使用 WooCommercewc_enqueue_js()函数在 WordPress 中排队。

// 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();   
}

代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。


推荐阅读