I was playing today with my own checkout design and UX and while testing I realized new customers could access the WP Admin black bar after purchase. So – I said – easy task!

But after 20 minutes of reality (thought it was going to take 1 minute) I finally found out the problem. And as usual, this blog comes with the solution – feel free to use this fix on your own WooSite 🙂

D'oh! WooCustomers can see the WP Admin Bar...
D'oh! WooCustomers can see the WP Admin Bar... D’oh! WooCustomers can see the WP Admin Bar…

1. Hide WP Admin Bar: The Theory

WordPress gives us a great filter called “show_admin_bar“. Easy peasy – set it to false and the admin bar is gone:


// Disable admin bar for non admins (this would work on a non-Woo site...)

function bbloomer_hide_admin_bar_if( $show ) {
	if ( /* CONDITION */ ) $show = false;
	return $show;
}

add_filter( 'show_admin_bar', 'bbloomer_hide_admin_bar_if' );

2. Hide WP Admin Bar: The Woo Reality

After the above snippet wouldn’t work on a Woo install, I did a lot of research. Tried other snippets but nothing. So, I said to myself… what if WooCommerce is ALREADY using that filter and I’m trying to edit the behavior of something that Woo is already modifying?

Well… here’s what I found in woocommerceincludeswc-user-functions.php:


/**
 * Prevent any user who cannot 'edit_posts' (subscribers, customers etc) from seeing the admin bar.
 *
 */

function wc_disable_admin_bar( $show_admin_bar ) {
	if ( apply_filters( 'woocommerce_disable_admin_bar', get_option( 'woocommerce_lock_down_admin', 'yes' ) === 'yes' ) && ! ( current_user_can( 'edit_posts' ) || current_user_can( 'manage_woocommerce' ) ) ) {
		$show_admin_bar = false;
	}

	return $show_admin_bar;
}
add_filter( 'show_admin_bar', 'wc_disable_admin_bar', 10, 1 );

See, something is already using the filter “show_admin_bar”, and what matters the most – the priority specified there is “10”.

Basically I was changing the behavior of the WP Admin Bar, but then WooCommerce was re-changing it after my call – in fact without specifying the priority, my filter got a default priority of “10”, too early to expect Woo NOT to re-change such functionality.

If this is not clear, and you’d rather get the fix – well, not to worry, here it is.

3. Hide WP Admin Bar for non-Admins: WooCommerce PHP Snippet


/**
 * @snippet       WooCommerce Hide WP Admin Bar for non-Admins
 * @how-to        Get CustomizeWoo.com FREE
 * @sourcecode    https://businessbloomer.com/?p=21213
 * @author        Rodolfo Melogli
 * @testedwith    WooCommerce 2.6.7
 */

function bbloomer_hide_admin_bar_if_non_admin( $show ) {
	if ( ! current_user_can( 'administrator' ) ) $show = false;
	return $show;
}

add_filter( 'show_admin_bar', 'bbloomer_hide_admin_bar_if_non_admin', 20, 1 );

// please note the priority = '20' to make sure we run the filter after Woo's one

Share:

Leave a Reply