How to hide the WooCommerce Shop page

Posted by kento on February 12, 2013 11:36 am

I’ve been asked if it is possible to hide the WooCommerce Shop page based on Groups’ access restrictions. As it is, trying to apply the normal way (checking a capability in the Access restrictions of the page) simply doesn’t work.

So what does work? Here’s an example:

Let’s assume that you are protecting your pages using the standard groups_read_post capability, any user that belongs to a group with that capability should be able to access the Shop page.

Create the woocommerce folder under the base folder of your active theme and copy archive-product.php from woocommerce/templates there.

At the top of your fresh copy, insert:

if ( class_exists( 'Groups_User' ) ) {
	$redirect = true;
	if ( $user_id = get_current_user_id() ) {
		$user = new Groups_User( $user_id );
		if ( $user->can( 'groups_read_post' ) ) {
			$redirect = false;
		}
	}
	if ( $redirect ) {
		wp_redirect( get_bloginfo( 'home' ) );
	}
}

… right before:

get_header('shop');

This will redirect visitors who try to access the Shop page to the site’s home page.

About kento
Computer Science Engineer, IT & Business Consultant, Drupal, WordPress, Scenario Planning ...

21 comments

  • lastafa

    Great stuff! Does this or another approach with the groups plugin work for single products? I have tried many plugins for having members-only products, restricting access to the product and removing it from catalog etc.

    Thank you for any input or direction. :)

  • lastafa

    Thanks Antonio, this works absolutely brilliant!

  • Bernhard

    Hello,

    I am also using groups access restrictions in order to realize a member’s only section on my page. Everything works fine, but the woocommerce categories are still shown. No products are shown for registered members, but all categories.

    How can we hide the categories as well?

    thx for your help,
    Bernhard

    • Hi Bernhard,

      This is something I’m currently looking at – restricting categories based on groups. It might be made part of the core plugin or a separate extension, depending on the impact and complexity.

      One approach you could use currently is to adjust the templates used to display products in categories and the categories themselves – Groups’ API can be used to check the membership and display them conditionally.

      I hope that helps at least to point you in the right direction.

      Cheers

      • Bernhard

        Hi Kento,

        thx for your reply. I think it could help if I would be clever enough to build it into the template like you suggested. Sadly that is beyond my scope..

        So I do hope this feature becomes available as plugin feature soon..

        cheers,
        Bernhard

        • Thanks for the feedback and the suggestion Bernhard, yes that would require adequate knowledge on how to code it into the template. It might be an option with advanced logic built into the plugin, but this hasn’t been done yet.

  • Masayuki

    Hello

    I am using WooCommerce, Groups, Groups WooCommerce and Affiliates Enterprise.
    I think these are fantastic plugins!
    I want to know how to set a specific product is not shown to the Premium group.

    My client has a product for Non-registration customers.(ex.Product A)
    And also, client has product for Premium group members.(ex.Product B)
    It is the scenario which is promoted to a Premium group member when the Non-registration customer buys product A.

    [Visibility Restriction Case 1]
    Non-registration customer can see Product A.
    Premium group member can not see Product A.

    [Visibility Restriction Case 2]
    Premium group member can see Product B.
    Non-registration customer can not see Product B.

    Case 2 is easy to setup using “groups_read_post” capability.
    But I could not set Case 1.
    I have searched for Forum, but I did not find useful information.
    I feel it can be set if there is something like “groups_unread_post”….

    Please advise how to set Restriction Case 1.

    Thank you.

    • Hi Masayuki,

      Many thanks for the feedback on the plugins and for using them :)

      For the case you have explained, one way is to use product-related capabilities assigned to product-specific groups.

      For example:

      Product “A” – Group “A” – capability “a”
      Product “B” – Group “B” – capability “b”

      Then you can distinguish more precisely who can see what based on group membership. The only thing that this doesn’t cover, is hiding Product A from the Premium group members. This is something that you could build into the template but you can’t achieve it using the back end UI elements.

      Cheers

  • Masayuki

    Hi Kento,

    Thank you for your response.
    I understand.
    In the meantime, I decided that the non-registration customers will added to something new group after registration.

    Regards

  • Hi Kento
    Many thanks for explaining this – I have manage to block the shop page and redirect to the home page but is there any chance you could explain that instead of redirecting to the home page how to redirect to the login page and then to the shop? I would really appreciate your help. Thanks

  • ok I have found some code that will redirect to the shop after login

    add_filter(‘woocommerce_login_redirect’, ‘ras_login_redirect’);

    function ras_login_redirect( $redirect_to ) {
    $redirect_to = “www.yourshop.com”;
    return $redirect_to;
    }

    but the only thing I need know is how to direct the user to the login (my-account) when they click on shop on the homepage instead of being redirected back to the homepage – I’ve tried a few variables but they do not work as I’m not much of a coder – really appreciate your help on this one

  • Dan

    Hi. My comment appears to have got deleted. I was just wondering how to redirect to the may account instead of wp_redirect( get_bloginfo( ‘home’ ) );

    Thanks

    • Hi Dan, probably an over-enthusiastic spam filter ate it ;)

      Do you mean something like this … ?


      $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
      wp_redirect( wp_login_url( $current_url ) );
      exit;

Leave a comment

Your email address will not be published. Required fields are marked *

*


two + 6 =

Please follow the Support guidelines.

Premium Support is available for customers in the Forums.