【问题标题】:Clear WooCommerce cart on Currency Switcher change清除货币切换器更改的 WooCommerce 购物车
【发布时间】:2021-06-22 01:13:21
【问题描述】:

我正在使用货币切换器 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 文件中。这是我的源代码

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

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

【问题讨论】:

  • echo $url_data; 应该达到什么目的?
  • .on('change', function () { function Clearcart(d){ 没有意义。没有人在任何地方调用该函数Clearcart
  • @CBroe 我已经删除了 echo 语句。但是我不确定 ClearCart 功能。我参考了另一个链接“stackoverflow.com/questions/40174894/…”,只是使用了该代码,希望它能清除我的购物车。你会建议我做哪些改变?
  • 在事件处理回调中执行代码,而不是将其包装到另一个函数中?不清楚d 应该在这里。响应。首先传递任何附加参数会有什么意义。

标签: php jquery ajax wordpress woocommerce


【解决方案1】:

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

在下面的代码中,jQuery 代码现在位于一个 php 函数中,并使用 WooCommerce wc_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 文件中。经过测试并且可以工作。

【讨论】:

  • 代码完美运行。太感谢了。我仍然需要了解它是如何工作的,但我不会停下来。
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多