You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义AJAX添加商品后,无法实时更新WooLentor侧边购物车

解决WooLentor侧边购物车AJAX加购后不实时更新的问题

针对你自定义可变商品加购功能后,WooLentor侧边购物车无法实时刷新的问题,核心原因是自定义AJAX流程没有触发WooCommerce及WooLentor监听的购物车更新事件,以下是具体解决方案:


1. 修改PHP处理函数,返回标准购物车片段

WooCommerce通过购物车片段(cart fragments)实现页面元素的局部更新,我们需要在加购成功后返回这些片段,而不是仅返回"success"状态:

add_action('wp_ajax_nav_add_to_cart', 'nav_add_to_cart'); 
add_action('wp_ajax_nopriv_nav_add_to_cart', 'nav_add_to_cart');          
function nav_add_to_cart() {  
    $product_id = (int) $_REQUEST['product_id'];
    $quantity = $_REQUEST['nav_quantity'];
    $variation_id =  (int) $_REQUEST['variation_id'];
    $product_status = get_post_status($product_id); 

    $added = false;
    if ('publish' === $product_status) {
        $added = WC()->cart->add_to_cart($product_id, $quantity, $variation_id);
    }

    if ($added) {
        // 生成并返回WooCommerce标准购物车片段
        ob_start();
        woocommerce_mini_cart();
        $mini_cart = ob_get_clean();

        wp_send_json_success(array(
            'mini_cart' => $mini_cart,
            'cart_count' => WC()->cart->get_cart_contents_count(),
            'cart_total' => WC()->cart->get_cart_total()
        ));
    } else { 
        wp_send_json_error('商品添加失败');  
    }
    wp_die();
}

2. 优化前端AJAX代码,触发购物车更新事件

将同步AJAX改为异步(避免阻塞页面),并在所有加购请求完成后,触发WooCommerce原生事件及WooLentor的刷新逻辑:

jQuery('body').on('click','.nav_var_add_to_cart', function(){
    var ajaxRequests = [];
    
    // 收集所有选中变体的AJAX请求
    jQuery(".nav_var_option.active").each(function(i , obj) {
        let product_id = jQuery(obj).find('.nav_text').attr('data_pid'); 
        let var_id = jQuery(obj).find('.nav_text').attr('nav-var');
        let qty = jQuery("[data_var="+var_id+"]").find('.qty').val();
        
        var request = jQuery.ajax({
            type : "post", 
            async: true,
            cache: false,
            timeout: 30000,
            url : '<?php echo admin_url("admin-ajax.php");  ?>',
            data : {
                action: "nav_add_to_cart", 
                product_id : product_id, 
                variation_id : var_id,
                nav_quantity : qty
            },
            error: function(){
                alert("该商品添加出错");
            }
        });
        
        ajaxRequests.push(request);
    }); 

    // 等待所有请求完成后统一处理刷新
    jQuery.when.apply(jQuery, ajaxRequests).done(function() {
        alert("所有选中商品已添加到购物车"); 

        // 触发WooCommerce原生购物车更新事件
        jQuery(document.body).trigger('wc_update_cart');
        jQuery(document.body).trigger('wc_fragment_refresh');
        jQuery(document.body).trigger('wc_cart_updated');

        // 尝试调用WooLentor侧边购物车专属刷新方法(根据版本调整)
        if (typeof WooLentorMiniCart !== 'undefined') {
            WooLentorMiniCart.refresh();
        } else if (typeof jQuery.fn.woolentorMiniCart !== 'undefined') {
            jQuery('.woolentor-mini-cart').woolentorMiniCart('refresh');
        }

        // Fallback:手动请求最新购物车片段并更新DOM
        jQuery.ajax({
            url: wc_cart_fragments_params.wc_ajax_url.toString().replace('%%endpoint%%', 'get_refreshed_fragments'),
            type: 'POST',
            success: function(data) {
                if (data && data.fragments) {
                    jQuery.each(data.fragments, function(key, value) {
                        jQuery(key).replaceWith(value);
                    });
                    jQuery(document.body).trigger('wc_fragments_refreshed');
                }
            }
        });
    }).fail(function() {
        alert("部分商品添加失败,请重试");
    });
});

3. 确保WooCommerce购物车片段脚本加载

如果你的页面没有默认加载WooCommerce的购物车片段脚本,添加以下代码确保其加载:

add_action('wp_enqueue_scripts', 'enqueue_wc_cart_fragments');
function enqueue_wc_cart_fragments() {
    if (function_exists('is_woocommerce') && is_woocommerce()) {
        wp_enqueue_script('wc-cart-fragments');
    }
}

关键说明

  • WooLentor的侧边购物车依赖WooCommerce的购物车更新事件或自身封装的刷新方法,触发这些事件后插件会自动重新渲染购物车内容。
  • 若上述方法无效,可查看WooLentor的前端JS代码,找到其对应的购物车刷新函数名,替换代码中的调用逻辑即可。

内容的提问来源于stack exchange,提问作者Naveed Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:24:59