如果不在 Woocommerce 中重新加载,自定义购物车计数不会更新
Custom cart count is not updating without reloading in Woocommerce
我已将 ajax 脚本加入队列,但我似乎无法在不刷新页面的情况下更新购物车商品计数。
函数:
// Add scripts and stylesheets
function startwordpress_scripts() {
wp_enqueue_style( 'reset', get_template_directory_uri() . '/reset.css' );
wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'style', get_template_directory_uri() . '/veggiee.css');
wp_enqueue_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js', array(), null, true);
}
function woocommerce_header_add_to_cart_fragment( $fragments ) {
global $woocommerce;
ob_start();
$fragments['a.cart-customlocation'] = ob_get_clean();
return $fragments;
}
add_filter( 'woocommerce_add_to_cart_validation', 'is_product_the_same_cat', 10, 3 );
HTML:
<ul>
<li>
<a href="/cart" id="cart_icon"></a></li><li><span class="counter">
<?php echo sprintf ( _n( '%d', '%d', WC()->cart>get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?></span></li>
<li id="access"><?php wp_nav_menu( array( 'sort_column' => 'menu_order', 'container_class' => 'menu-header' ) ); ?></li>
</ul>
我已经研究了这个问题,据我所知,篮子总数应该立即更新而无需刷新。
有人知道我在这里遗漏了什么吗?
您的代码中存在一些错误和缺失。对于您 header 中的购物车商品计数,以下内容将解决问题。
1) header.php
文件中的 HTML 代码:
<ul>
<li>
<a href="/cart" id="cart_icon"></a>
</li>
<li>
<span class="counter" id="cart-count"><?php
$cart_count = WC()->cart->get_cart_contents_count();
echo sprintf ( _n( '%d', '%d', $cart_count ), $cart_count );
?></span>
</li>
<li id="access"><?php wp_nav_menu( array( 'sort_column' => 'menu_order', 'container_class' => 'menu-header' ) ); ?></li>
</ul>
2) 用于启用购物车商品计数的相关挂钩函数代码 Ajax 已刷新:
add_filter( 'woocommerce_add_to_cart_fragments', 'refresh_cart_count', 50, 1 );
function refresh_cart_count( $fragments ){
ob_start();
?>
<span class="counter" id="cart-count"><?php
$cart_count = WC()->cart->get_cart_contents_count();
echo sprintf ( _n( '%d', '%d', $cart_count ), $cart_count );
?></span>
<?php
$fragments['#cart-count'] = ob_get_clean();
return $fragments;
}
代码进入活动 child 主题(或活动主题)的 function.php 文件。已测试并有效。
我已将 ajax 脚本加入队列,但我似乎无法在不刷新页面的情况下更新购物车商品计数。
函数:
// Add scripts and stylesheets
function startwordpress_scripts() {
wp_enqueue_style( 'reset', get_template_directory_uri() . '/reset.css' );
wp_enqueue_style( 'style', get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'style', get_template_directory_uri() . '/veggiee.css');
wp_enqueue_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js', array(), null, true);
}
function woocommerce_header_add_to_cart_fragment( $fragments ) {
global $woocommerce;
ob_start();
$fragments['a.cart-customlocation'] = ob_get_clean();
return $fragments;
}
add_filter( 'woocommerce_add_to_cart_validation', 'is_product_the_same_cat', 10, 3 );
HTML:
<ul>
<li>
<a href="/cart" id="cart_icon"></a></li><li><span class="counter">
<?php echo sprintf ( _n( '%d', '%d', WC()->cart>get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?></span></li>
<li id="access"><?php wp_nav_menu( array( 'sort_column' => 'menu_order', 'container_class' => 'menu-header' ) ); ?></li>
</ul>
我已经研究了这个问题,据我所知,篮子总数应该立即更新而无需刷新。
有人知道我在这里遗漏了什么吗?
您的代码中存在一些错误和缺失。对于您 header 中的购物车商品计数,以下内容将解决问题。
1) header.php
文件中的 HTML 代码:
<ul>
<li>
<a href="/cart" id="cart_icon"></a>
</li>
<li>
<span class="counter" id="cart-count"><?php
$cart_count = WC()->cart->get_cart_contents_count();
echo sprintf ( _n( '%d', '%d', $cart_count ), $cart_count );
?></span>
</li>
<li id="access"><?php wp_nav_menu( array( 'sort_column' => 'menu_order', 'container_class' => 'menu-header' ) ); ?></li>
</ul>
2) 用于启用购物车商品计数的相关挂钩函数代码 Ajax 已刷新:
add_filter( 'woocommerce_add_to_cart_fragments', 'refresh_cart_count', 50, 1 );
function refresh_cart_count( $fragments ){
ob_start();
?>
<span class="counter" id="cart-count"><?php
$cart_count = WC()->cart->get_cart_contents_count();
echo sprintf ( _n( '%d', '%d', $cart_count ), $cart_count );
?></span>
<?php
$fragments['#cart-count'] = ob_get_clean();
return $fragments;
}
代码进入活动 child 主题(或活动主题)的 function.php 文件。已测试并有效。