WooCommerce订阅商品自定义Ajax加购无法识别一次性套餐、$button未定义求助
问题1:无法识别一次性购买参数的解决方法
你当前的AJAX请求仅提交了product_id参数,没有携带链接中控制购买类型的convert_to_sub_55337=0参数,WooCommerce Subscription插件未收到该参数时会默认加购订阅套餐。你需要完整解析链接中的所有查询参数,统一提交给加购接口。
问题2:Uncaught TypeError: $button is undefined报错的解决方法
WooCommerce原生added_to_cart事件触发要求传入3个参数:response.fragments、response.cart_hash、触发加购的按钮对象,你当前只传了前两个参数,导致WooCommerce内置的事件监听逻辑找不到对应的$button变量抛出异常。
另外你原代码中if (response.error & response.product_url)使用了位运算符&,应该替换为逻辑与运算符&&避免逻辑判断异常。
修正后完整代码
(function($) { $(document).on('click', '.testing', function(e) { var $thisbutton = $(this); var href_str = $thisbutton.prop('href'); try { var url_obj = new URL(href_str); var search_params = url_obj.searchParams; if (!search_params.has('add-to-cart')) return; } catch (err) { return; } e.preventDefault(); // 完整解析所有查询参数 var data = {}; search_params.forEach(function(value, key) { data[key] = value; }); $(document.body).trigger('adding_to_cart', [$thisbutton, data]); $.ajax({ type: 'post', url: wc_add_to_cart_params.wc_ajax_url.replace( '%%endpoint%%', 'add_to_cart' ), data: data, beforeSend: function() { $thisbutton.removeClass('added').addClass('loading'); }, complete: function() { $thisbutton.addClass('added').removeClass('loading'); }, success: function(response) { if (response.error && response.product_url) { window.location = response.product_url; return; } else { // 新增第三个参数传入按钮对象,解决$button未定义报错 $(document.body).trigger('added_to_cart', [ response.fragments, response.cart_hash, $thisbutton ]); $('a[data-notification-link="cart-overview"]').click(); } } }); return false; }); })(jQuery);
内容的提问来源于stack exchange,提问作者user6684898
相关产品推荐
相关产品推荐

