我有一个网站,我希望每次有人点击时都会通过ajax更新其购物车商品和总数#34;添加到购物车"。我在我的wordpress' function.php
中使用下面的代码add_filter('wp_nav_menu_items','sk_wcmenucart', 10, 2);
function sk_wcmenucart($menu, $args) {
// Check if WooCommerce is active and add a new item to a menu assigned to Primary Navigation Menu location
if ( !in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) || 'primary' !== $args->theme_location )
return $menu;
ob_start();
global $woocommerce;
$viewing_cart = __('View your shopping cart', 'your-theme-slug');
$start_shopping = __('Start shopping', 'your-theme-slug');
$cart_url = $woocommerce->cart->get_cart_url();
$shop_page_url = get_permalink( woocommerce_get_page_id( 'shop' ) );
$cart_contents_count = $woocommerce->cart->cart_contents_count;
$cart_contents = sprintf(_n('%d item', '%d items', $cart_contents_count, 'your-theme-slug'), $cart_contents_count);
$cart_total = $woocommerce->cart->get_cart_total();
// Uncomment the line below to hide nav menu cart item when there are no items in the cart
// if ( $cart_contents_count > 0 ) {
if ($cart_contents_count == 0) {
$menu_item = '<li class="right"><a class="wcmenucart-contents" href="'. $shop_page_url .'" title="'. $start_shopping .'">';
} else {
$menu_item = '<li class="right"><a class="wcmenucart-contents" href="'. $cart_url .'" title="'. $viewing_cart .'">';
}
$menu_item .= '<i class="fa fa-shopping-cart"></i> ';
$menu_item .= $cart_contents.' - '. $cart_total;
$menu_item .= '</a></li>';
// Uncomment the line below to hide nav menu cart item when there are no items in the cart
// }
echo $menu_item;
$social = ob_get_clean();
return $menu . $social;
}
答案 0 :(得分:2)
使用ob_get_clean()的想法是正确的,但你需要使用可能是woocommerce_add_to_fragments
的正确的钩子。就像你可以使用类似下面的函数将ajax返回的数据收集到变量中更新购物车数量 - -
add_filter('woocommerce_add_to_cart_fragments', 'newCount');
function newCount($fr){
global $woocommerce;
$items = $woocommerce->cart->get_cart();
ob_start();
echo'<a class="cart-contents" href="'.WC()->cart-
>get_cart_url().'">'.WC()->cart->get_cart_contents_count().'</a>';
$fr['a.cart-contents'] = ob_get_clean();
return $fr;
}
然后将其缓冲到您的显示位置:
Cart total: <a class="cart-contents">WC()->cart->get_cart_contents_count()</a>
PS:你需要PHP7来运行代码。