我已经把头发撕了两天了,每当我想我已经解决了它,它就会再次出现。
在我的header.php
中,我有以下代码用于显示购物车中的商品数量,以及显示商品本身的简单显示/隐藏div以及总数:
<a id="miniart" href="<?php echo WC()->cart->get_cart_url(); ?>" class="cart icon red relative">
<div class="number bold">
<?php echo sprintf('%d', WC()->cart->cart_contents_count); ?>
</div>
<div>
<?php returnIcon('cart'); // This function simply displays an inline SVG ?>
</div>
<div id="cartcontents">
<div class="widget_shopping_cart_content">
<?php woocommerce_mini_cart(); ?>
</div>
</div>
</a>
我还有一个过滤器,可以在添加新项目时通过AJAX返回购物车碎片:
function woocommerce_header_add_to_cart_fragment($fragments) {
ob_start();
?>
<div class="number bold">
<?php echo sprintf('%d', WC()->cart->cart_contents_count); ?>
</div>
<?php
$fragments['#minicart .number'] = ob_get_clean();
return $fragments;
}
add_filter('woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment');
过滤器始终有效 - 我从未遇到过问题。完全抛弃我的是标题(cart_contents_count
&amp; woocommerce_mini_cart()
)中的标准预处理调用似乎是完全缓存的。如果我添加一个新项目,AJAX将更新两个以显示 1 并添加实际项目;但如果我更改页面或刷新,则默认返回 0 和无项目。如果我去购物车,尽管迷你车仍然说我什么都没有,实际购物车页面会正确显示购物车内容。
如果我转到购物车页面并从购物车中删除了某些内容,它似乎只会更新;例如,如果我实际上我的购物车中有7件物品,但是微型车显示0,然后从我的购物车中删除了一件物品,突然间minicart会核心显示6.但是,从那时起将留在6,即使我添加了另外十几项。
这是我尝试过的:
#minicart
至#tinycart
等) - 工作一次,然后立即重新开始缓存。mini-cart.php
模板文件:以防万一,看看是否存在问题。没有区别。woocommerce_mini_cart()
函数放在其他任何地方:这真的很有效。如果我将此函数和echo sprintf('%d', WC()->cart->cart_contents_count)
行并将它们放在任何地方 - 在标题内,在页面正文中,甚至在相同元素内部进行'缓存', 他们工作。它们显示正确的项目数和正确的项目列表。但是如上所述,另一个对此函数的调用似乎仍然是缓存的。如上所述,即使没有其他插件运行,也会发生这种情况;它既发生在本地(在Windows上完全标准的XAMPP安装)和远程发生(niftier nginx设置,稍微更新的PHP版本),也没有启用任何类型的缓存。
我会非常感激地收到任何建议,因为我完全忘记了这一点。
答案 0 :(得分:3)
有点晚了,但我尝试了你的代码,它对我有一些小修改。 我已将 miniart 中的ID更改为 minicart ,并将returnIcon注释掉
<a id="minicart" href="<?php echo WC()->cart->get_cart_url(); ?>" class="cart icon red relative">
<div class="number bold">
<?php echo sprintf('%d', WC()->cart->cart_contents_count); ?>
</div>
<div>
<?php //returnIcon('cart'); // This function simply displays an inline SVG ?>
</div>
<div id="cartcontents">
<div class="widget_shopping_cart_content">
<?php woocommerce_mini_cart(); ?>
</div>
</div>
</a>
另一项更改是将woocommerce_header_add_to_cart_fragment重命名为wif_woocommerce_header_add_to_cart_fragment
function wif_woocommerce_header_add_to_cart_fragment($fragments) {
ob_start();
?>
<div class="number bold">
<?php echo sprintf('%d', WC()->cart->cart_contents_count); ?>
</div>
<?php
$fragments['#minicart .number'] = ob_get_clean();
return $fragments;
}
add_filter('woocommerce_add_to_cart_fragments', 'wif_woocommerce_header_add_to_cart_fragment');