当前位置: 首页 > 面试题库 >

Woocommerce中的Ajaxify标头购物车项目计数

解鸿运
2023-03-14
问题内容

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

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

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

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

<?php
require('../../../wp-blog-header.php');
global $woocommerce;
echo $woocommerce->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("<?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标签中,例如:

?>
    <div id="mini-cart-count"></div>
<?php

要么:

echo '<div id="mini-cart-count"></div>';

2)代码:

add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_mini_cart_count');
function wc_refresh_mini_cart_count($fragments){
    ob_start();
    ?>
    <div id="mini-cart-count">
        <?php echo WC()->cart->get_cart_contents_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_refreshwc_fragments_refreshed委派事件,例如:

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

要么:

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


 类似资料:
  • 问题内容: 我有上面的代码。 如果我在cart_item上运行print_r,我将得到一个多维数组: 我如何只获得product_id? 我试过$ test = 没用 问题答案: 要获取 foreach循环中的每个购物车商品(对于简单产品): 如果是可变产品,请获取 : 或在两种情况下 ( Woocommerce 3+中 的 Object在哪里) : 更新: 循环外使用产品ID 1)打破循环 (仅

  • 问题内容: 我正在尝试使用以下功能更改购物车中的产品价格: 它在WooCommerce版本2.6.x中正常运行,但在版本3.0+中不再正常运行 如何使其在WooCommerce 3.0+版中正常工作? 谢谢。 问题答案: 更新 (2018年9月) 使用 WooCommerce 3.0+版本, 您需要: 要改用 钩子。 要改用WC_Cart 方法 改用WC_product 方法 这是代码: 该代码在

  • 我正在尝试根据购物车中的产品数量向购物车添加一个名为(送货费)的产品。 购物车示例: 产品A(数量5) 产品B(数量2) 产品C(数量4) 送货费(数量3)**这是3,因为这是添加送货费产品之前添加到购物车中的应计数的行项目总数。 我的代码有问题: 它总是返回一个更高的数字。我认为这是计算每个产品的数量,而不是实际的产品项目。 任何帮助都将不胜感激!

  • 如何在Woocommerce购物车页面中的购物车项目名称后添加产品ID? 我知道我需要先不返回,因为这样会把我从函数中拉出来,但我很好奇我该如何去做这件事。

  • 我写的函数应该检查是否有在购物车的项目,其中有一个特定的类别。 我的想法是: 我猜,get_cart()函数将返回购物车的内容,我将能够从中获取有关商品类别的信息。我需要知道get_cart()返回数组的结构,所以我写了: 得到 然后,我尝试在get_cart()函数的结果中查找类别名称: 得到了同样的错误。 使用$woocommerce而不是WC()不会产生任何效果,也不会删除 我做错了什么?我

  • 最初,我选择了一个包(Woo订阅) 然后添加了所有详细信息。 但未提交。 回到网站,所以再次购买我需要选择一个包。所以我选择了这个包,并填写了详细信息,然后转到付款包。 现在在我的购物车中,两个包都存在(即我没有第一次购买就选择的包和最近的包) 如何修复此问题,使最新选定的一个在购物车中,而较早的一个在选定最新的一个后立即删除。 我尝试了这个Woocommerce从购物车中删除所有产品,并将当前产