php - Woocommerce 中的 Ajaxify 标题购物车项目计数
问题描述
我正在为 wordpress 创建一个自定义的 woocommerce 集成主题。
我在顶部有一个显示购物车中商品总数的 blob,我想使用 Jquery 更新此 blob(无需重新加载页面)我能够通过获取当前数字来增加商品数量blob 并为每次点击增加 +1,问题是添加到购物车有一个选项可以选择要添加到购物车的商品数量。因此,如果我选择 3 个项目并单击按钮,则 blob 只会增加一个。
我可以创建一种方法来获取从前端添加的项目数量,但我认为这是不必要的。我希望能够使用 jquery 从 PHP 会话中获取总数,以便每次单击添加项目或删除项目时,我都会从服务器动态获取当前数字。
到目前为止我所做的是创建一个 reloadCart.php 文件来回显购物车总数,这是代码
<?php
require('../../../wp-blog-header.php');
global $woocommerce;
echo $woocommerce->cart->get_cart_contents_count();
?>
当我访问此页面时,它会回显当前项目总数,但我无法从 jquery 获取此数据,自从我上次使用 AJAX 以来已经有一段时间了,我也很长时间没有从事网络项目,但据我所知,我正在进行的 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("<?php echo get_template_directory_uri(); ?>/reloadCart.php", function(data){
alert("Data: " + data);
});
});
注释的行是我之前使用的行,通过从前端获取当前购物车编号来添加购物车总数。
任何帮助,将不胜感激。提前致谢!
解决方案
您不应该使用任何重新加载来更新购物车内容计数......相反,您应该使用由Ajax 驱动的专用woocommerce_add_to_cart_fragments
操作挂钩。
1)要刷新的 HTML:因此,首先在您的主题header.php
文件中,您应该需要将购物车计数嵌入到具有定义的唯一 ID(或类)的特定 html 标记中,例如:
$items_count = WC()->cart->get_cart_contents_count();
?>
<div id="mini-cart-count"><?php echo $items_count ? $items_count : ' '; ?></div>
<?php
或者:
$items_count = WC()->cart->get_cart_contents_count();
echo '<div id="mini-cart-count"><?php echo $items_count ? $items_count : ' '; ?></div>';
2)代码:
add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_mini_cart_count');
function wc_refresh_mini_cart_count($fragments){
ob_start();
$items_count = WC()->cart->get_cart_contents_count();
?>
<div id="mini-cart-count"><?php echo $items_count ? $items_count : ' '; ?></div>
<?php
$fragments['#mini-cart-count'] = ob_get_clean();
return $fragments;
}
如果您在 html 标签中使用类,您将替换['#mini-cart-count']
为['.mini-cart-count']
. 这个钩子也用于刷新迷你购物车的内容。
代码在您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。
由于几年
global $woocommerce;
+$woocommerce->cart
已过时并被WC()->cart
访问 WooCommerce 购物车对象所取代。
如果您需要 jQuery 强制刷新该计数,您可以尝试wc_fragment_refresh
或wc_fragments_refreshed
委托事件,例如:
$(document.body).trigger('wc_fragment_refresh');
或者:
$(document.body).trigger('wc_fragments_refreshed');
推荐阅读
- android - Room DB:如何在不使用 TypeConverter 的情况下使用列表参数初始化实体
- r - 替换那些没有 R 中前导/结束空格的字符串
- routes - 本地测试时微服务如何路由
- java - 两次调用 ActionListener
- java - java 8 将字节分割成块
- embedded - 我在哪里可以检查 CANalyzer 中的 CAN 帧错误?
- google-sheets - 如何使我的第二个(右)Y 轴在 Google 表格中从 0 开始?
- mysql - 如何加速一个高度活跃的大数据表(MySQL)?
- html - 如何设置 SVG 样式
使用 `fill="url(#a)"` 时使用 Tailwind CSS? - node.js - 如何在 node-telegram-bot-api 中仅删除 bot.on() 函数?