Skip to content

Instantly share code, notes, and snippets.

@srikat
Last active December 12, 2020 23:45
  • Star 10 You must be signed in to star a gist
  • Fork 32 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save srikat/8264387 to your computer and use it in GitHub Desktop.
Adding a cart icon with number of items and total cost in nav menu when using WooCommerce. http://sridharkatakam.com/adding-cart-icon-number-items-total-cost-nav-menu-using-woocommerce/
//* Make Font Awesome available
add_action( 'wp_enqueue_scripts', 'enqueue_font_awesome' );
function enqueue_font_awesome() {
wp_enqueue_style( 'font-awesome', '//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css' );
}
/**
* Place a cart icon with number of items and total cost in the menu bar.
*
* Source: http://wordpress.org/plugins/woocommerce-menu-bar-cart/
*/
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;
}
@KingYes
Copy link

KingYes commented May 15, 2014

Why are you using with ob_start(), when you can use with $menu_item?

@rgb4u
Copy link

rgb4u commented Nov 11, 2015

Hi, i have weird problem with this code: when i refresh page, the total number of items in cart will grow +1

@oxhey
Copy link

oxhey commented Mar 9, 2017

How do I make this update with ajax automatically?

@MrJoshFisher
Copy link

Line #26 should be
wc_get_page_id()
not
woocommerce_get_page_id()
Depreciated.

@NicBeltramelli
Copy link

It's just what I was looking for and it works fine, thanks a lot.
Please consider updating your gist from my fork because woocommerce_get_page_id is deprecated since version 3.0, use wc_get_page_id instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment