在Woocommerce中对购物车项目进行Ajax化

我正在为wordpress创建一个自定义的woocommerce集成主题。

我在顶部有一个blob,显示购物车中的商品总数,我想使用Jquery更新此blob(无需重新加载页面)我可以通过获取当前数字来增加商品数量blob并且每次点击增加+1,问题是添加到购物车有一个选项,可以选择要添加到购物车的项目数。 因此,如果我选择3个项目并单击按钮,则blob仅增加1。

我可以创建一种方法来获取从前端添加的项目数,但我认为这是不必要的。 我希望能够使用jquery从PHP会话中获取总数,以便在每次单击添加项目或删除项目时,我将从服务器动态获取当前数字。

到目前为止我所做的是创建一个reloadCart.php文件,回显购物车总数,这里是代码

cart->get_cart_contents_count(); ?> 

当我访问这个页面时,它回显了当前的项目总数,但是我无法从jquery获取这些数据,自从我上次使用AJAX以来已经有一段时间我也没有在很长一段时间内从事过web项目,但是我记得,我正在制作的AJAX调用是正确的。

我已经尝试使用jquery的get()和post()函数以及普通的ajax()函数,但似乎没有任何效果。 有人可以帮忙吗?

 $(".ajax_add_to_cart").click(function () { /*$("#bag-total").html(function () { var bagTotal = parseInt($(this).html()); return ++bagTotal; });*/ alert('clicked'); $.get("/reloadCart.php", function(data){ alert("Data: " + data); }); }); 

评论的行是我之前使用的行,通过从前端获取当前购物车编号来添加购物车总数。

任何帮助,将不胜感激。 提前致谢!

您不应该使用任何重新加载来更新购物车内容计数…相反,您应该使用由Ajax驱动的专用woocommerce_add_to_cart_fragments操作挂钩。

1)要刷新的HTML:首先,在主题的header.php文件中,您需要将购物车计数嵌入到具有已定义的唯一ID(或类)的特定html标记中,例如:

 ?> 

要么:

 echo '
';

2)代码:

 add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_mini_cart_count'); function wc_refresh_mini_cart_count($fragments){ ob_start(); ?> 
cart->get_cart_contents_count(); ?>

如果你在你的html标签中使用了一个类,你将用['#mini-cart-count']替换['#mini-cart-count'] ['.mini-cart-count'] 。 此挂钩还用于刷新迷你购物车内容。

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

几年global $woocommerce; + $woocommerce->cart已过时,并由WC()->cart取代,以访问WooCommerce购物车对象。


如果您需要jQuery强制刷新该计数,您可以尝试wc_fragment_refreshwc_fragments_refreshed委托事件,例如:

 $(document.body).trigger('wc_fragment_refresh'); 

要么:

 $(document.body).trigger('wc_fragments_refreshed'); 

我之前没有使用过woocommerce,但是当你在post中说时,有一个非常简单的选择:

当我访问此页面时,它会回显当前项目总数,但我无法从JQuery获取此数据

…将使用用户侧的JavaScript变量进行显示,然后调用PHP更新方法,使用AJAX将项添加到购物车(我没有在下面显示,因为您没有提供该代码)。

 cart->get_cart_contents_count() $woocommerce = 59; ?>    

您可以在以下url上复制并测试此代码段: http : //phpfiddle.org/

基本上在上面的代码中,我将PHP值设置为页面加载时的段落文本,然后将该值读入JS变量,以便混淆应用程序客户端上的数据,然后根据需要更新显示文本。