Groups is a WordPress plugin that provides group-based user membership management, group-based capabilities and content access control. It integrates standard WordPress capabilities and application-specific capabilities along with an extensive API.


New Groups Restrict Categories and Groups Import Export.

  • Groups 404 Redirect allows to redirect visits to pages that are protected by Groups.
  • Groups Blog Protect restricts access to blogs based on group membership.
  • Groups File Access Groups File Access is an extension that allows to provide file download links for authorized users. Access to files is restricted to users by their group membership.
  • Groups Forums provides a powerful and yet light-weight forum system for WordPress sites.
  • Groups Gravity Forms allows to add users to groups automatically, based on form submissions.
  • Groups Import Export – An import and export extension for Groups.
  • Groups Jigoshop Groups integration for Jigoshop that supports memberships and subscriptions.
  • Groups Newsletters helps you to communicate efficiently, providing targeted information to groups of recipients through automated campaigns.
  • Groups Notifications allows to send automatic notifications to group members and the site administrator.
  • Groups PayPal – Sell memberships and subscriptions with Groups and PayPal.
  • Groups Restrict Categories features access restrictions for categories, tags and other WordPress taxonomies, including support for custom post types and taxonomies.
  • Groups Restrict Comments Pro This extension for Groups allows to restrict who can post or read comments based on a user’s group membership.
  • Groups Subscriptions is a subscription framework for Groups.
  • Groups WooCommerce Groups for WooCommerce is a WordPress plugin that allows you to sell memberships.
  • WooCommerce Group Coupons This extension for WooCommerce uses Groups and WordPress roles to limit the validity of coupons.
  • WooCommerce Groups Newsletters The WooCommerce Groups Newsletters extension lets customers subscribe to newsletters at checkout.


User groups

  • Supports an unlimited number of groups
  • Provides a Registered group which is automatically maintained
  • Users can be assigned to any group
  • Users are added automatically to the Registered group

Groups hierarchy

  • Supports group hierarchies with capability inheritance

Group capabilities

  • Integrates standard WordPress capabilities which can be assigned to groups and users
  • Supports custom capabilities: allows to define new capabilities for usage in plugins and web applications
  • Users inherit capabilities of the groups they belong to
  • Groups inherit capabilities of their parent groups

Access control

  • Built-in access control that allows to restrict access to posts, pages and custom content types to specific groups and users only
  • control access to content by groups: shortcodes allow to control who can access content on posts, show parts to members of certain groups or to those who are not members Shortcodes: [groups_member], [groups_non_member]
  • control access to content by capabilities: show (or do not show) content to users who have certain capabilities Shortcodes: [groups_can], [groups_can_not]

Easy user interface

  • integrates nicely with the standard WordPress Users menu
  • provides an intuitive Groups menu
  • conceptually clean views showing the essentials
  • quick filters
  • bulk-actions where needed, for example apply capabilities to groups, bulk-add users to groups, bulk-remove users from groups

Sensible options

  • administrator overrides can be turned off
  • optional tree view for groups can be shown only when needed
  • provides its own set of permissions
  • cleans up after testing with a “delete all plugin data” option

Access Control

Groups defines some capabilities of its own. The groups_read_post capability is used to restrict access to certain posts or pages to groups (and users) with that capability only.


  • Solid and sound data-model with a complete API that allows developers to create group-oriented web applications and plugins


  • All features are supported independently for each blog in multisite installations

Your opinion counts

You & Groups

Beta-testers and developers who need to integrate group-based features in their plugins and web applications: please use it and provide your feedback.


Feedback is welcome!

If you need help, have problems, want to leave feedback or want to provide constructive criticism, please do so here at the Groups plugin page.

Please try to solve problems there before you rate this plugin or say it doesn’t work. There goes a lot of work into providing you with free quality plugins! Please appreciate that and help with your feedback. Thanks!


Follow me on Twitter for updates on this and other plugins.


Content Access Control

Access restrictions on posts

On posts an pages (and custom content types) a new meta box titles Access restrictions appears. By checking Enforce read access, you can restrict access to the post to groups and users who have the groups_read_post capability. You need to assign this capability to a group and make users members of that group to allow them to see those posts.

Content visibility for members and non-members

The [groups_member] and [groups_non_member] shortcodes are used to limit visibility of content to users who are members of a group or users who are not members of a group. Multiple comma-separated groups can be specified.

Example: Limiting visibility of enclosed content to registered users.

[groups_member group="Registered"]

Only registered users can see this text.


Content visibility based on capabilities

The [groups_can] and [groups_can_not] shortcodes limit visibility of enclosed content to those users who have the capability or those who do not have it. Multiple capabilities can be given.

Example: Showing enclosed content to users who can edit_posts (standard WordPress capability).

[groups_can capability=”edit_posts”]

You can see this only if you have the edit_posts capability.


Integration in the ‘Users’ menu:

Users – group membership is managed from the standard Users admin view. Users are automatically added to the Registered group. You can add multiple users to other groups here and also remove them.

Sections in the ‘Groups’ menu:


Here you can:

  • add groups
  • remove groups
  • assign capabilities to groups


This is where you add, remove and manage capabilities.

Capabilities can be assigned to groups and users (1). These capabilities include the standard WordPress capabilities but you can also define additional capabilities for your web-application.

Groups defines some capabilities of its own. The groups_read_post capability is used to restrict access to certain posts or pages to groups (and users) with that capability only.

(1) Assigning capabilities to users is not integrated in the user interface yet but can be done through API calls.


Administrator override :

Administrator overrides can be turned off.

Permissions :

For each role these permissions can be set:

  • Access Groups: see information related to Groups.
  • Administer Groups: complete control over everything related to Groups.
  • Administer Groups plugin options: grants access to make changes on the Groups > Options admin section.

Testing the plugin :

A convenient option is provided to delete all data that has been stored by the Groups plugin. This option is useful if you just need to start from fresh after you have been testing the plugin.


Please visit the documentation page on shortcodes for up-to-date information: Groups Shortcodes


Download the Groups plugin on WordPress.

2,319 Responses to Groups

  1. Wilhelm August 16, 2018 at 4:40 pm #

    hi support.

    I like to know whether I am implementing the Shortcode correctly.

    I am setting a variable with get_template_part to recall the loop if the logged in user is part of the group.

    see the code below.

    The problem right now is that the loop is being recalled for all users and not just uses belonging to the group.

    • Kento August 22, 2018 at 7:50 am #

      Hi Wilhelm,

      The code was automatically removed from your comment – can you please provide it via a Gist?


  2. Giant August 22, 2018 at 12:38 pm #


    I want to know whether users can create group and invite user in his group


    • Kento August 22, 2018 at 5:31 pm #


      Thanks for asking, currently not but good to know there’s interest for group invites so I will take it into account for enhancements.


  3. René September 17, 2018 at 11:32 am #

    On the Group Options page, there seems to be a possibility to include nav_menu_item (ie. menu items). However, when checked, under Appearance > Menus > Menu …, there is no option to select specific groups that should see a menu item … Is this a bug, or simply wishful thinking? I hoped it would work like the ‘User Menus’ plugin, which allows for each menu item to select specific roles that should see that item – including custom links (see

    I am really having trouble finding a one-stop solution that enables me to show / hide any type of information on my site (ie. media, pages, posts, custom post types, widgets, menus) based on a specific group. The Groups plugin seems unable to limit access to menu items based on groups, the AAM plugin has a similar problem (based on roles). An alternative solution would be to skip groups, create user roles instead of groups, and use the Members plugin by ThemeHybrid to determine which content is shown to who. The ‘User Menus’ plugin could then be used to show or hide menu items. But I would prefer to keep groups and roles separate.

    Please let me know if you know a solution around this.

    • Kento September 19, 2018 at 7:30 pm #

      Hi René,

      For menu items that are directly related to a post type like those you choose from Appearance > Widgets under Posts or Pages, the items will be hidden if the entry is protected itself. If you use Custom Links, the menu items will appear always.

      It’s not related to the Navigation Menu Item / nav_menu_item you see under Groups > Options, at least not yet, although this is something I’d like to have added to Groups.

      I hope this helps to understand how these are currently handled and thanks for asking about it.


      • René September 20, 2018 at 1:15 pm #

        Hi Kento, thanks for clarifying this! It would be great if in the future, Groups could also handle Custom links in menu’s, making it a really alround solution. Keep up the good work!

        • Kento October 12, 2018 at 5:58 am #

          Hi René,

          I agree, we should have this and it’s already on my todo list 🙂


  4. Wilhelm September 25, 2018 at 12:06 pm #


    Is it possible to use this plugin to counts the terms of a custom taxonomy made by the group. could you please advise on a way to do this.

    Here is a link to the same qestion on the wordpress plugin support page plus the code I use to count the raw post with out groups.

    • Kento October 12, 2018 at 5:46 am #

      Hi Wilhelm,

      On you will find examples of a meta_query added to the query, in the particular case you are asking about, you would use the meta_key = 'groups-read' and meta_value = $group_id with meta_compare = '=' … obviously $group_id would hold the ID of the relevant group; you would use ‘IN’ as the comparison for multiple groups.


  5. Yannick October 2, 2018 at 11:33 pm #

    Thanks for this great plugin
    In WP 4.9.8, we can find in Options nav_menu_item as a post type you can check.

    But once checked, I can’t see the “group” input into my menu items
    How can i restrict menu items to certain groups of users ?

    • Kento October 10, 2018 at 5:45 am #

      Hi Yannick,

      Nice to hear that you like it!

      Although you can find the nav_menu_item entry under the post types listed, it will not provide an additional option for those to restrict access. Where it’s not a custom link (fixed URL), the access restriction will determine whether the link is displayed or not based on the user viewing the site.


  6. Tom October 4, 2018 at 8:02 pm #

    Hi. How do I make the page accessible to the public when the pages are using Groups? It just says that it can’t find the page if you are not logged in. Thanks.

    • Kento October 12, 2018 at 5:21 am #

      Hi Tom,

      If a page is restricted to a certain group, it will not be accessible to the general public, this is by design – I would recommend to have a look at the documentation pages to understand how Groups’ Access Control works:


  7. Alexis October 18, 2018 at 7:22 am #

    you plugins seems to be realy powerfull.
    I’m looking for a solution so that users can themself suscribe to groups via forms.
    I’m doing a teaching site and looking to create some kind of path. When they give the right respond (some kind of test) they access automaticly to the second groups. Stuff like this.
    Is there an api call that i can put in my forms that suscribe a user to the next level. I ‘m sure it’s possible (loked to the api) but did not understand realy how to do it. (not pro in coding!)
    can you put me on track ?
    Thanks a lot for this beautyfull peace of code
    (an sorry for my non native english language!)

    • Kento October 25, 2018 at 9:49 pm #

      Hi Alexis,

      Many thanks on your kind feedback on the plugin!

      To assign a user to a group is very easy, you can find an example on top of this documentation page:

      There is also an example on how to obtain the group by name a bit further below on the page, you can use that to obtain the group ID used to assign the user to a group.

      I hope this helps you!


  8. Sveta October 21, 2018 at 10:03 am #

    Hello, Kento!

    Thank you for this plugin – it’s working very well 🙂 But last 1-2 month about 30% of users do not have access to closed pages – there are no restrictions for them.

    Could you help what could be the problem? Maybe some plugin interferes?

    • Kento October 25, 2018 at 9:59 pm #

      Hi Sveta,

      I have seen some cases where a group was deleted and the access restrictions were not removed (for a variety of reasons or conflicts). What you can try very easily is edit a page where this happens, assign a group to restrict access, save the page, then remove the group restricting access and save the page again. This will reset any internal assignments that might be mixed up.


  9. Louis October 29, 2018 at 6:17 pm #

    Very good plugin that we use extensively, but we have made a minor tweak to improve functionality. We are using the groups_group_info shortcode, which displays all user’s userids in specified group, we are modifying line 189 of file /groups/lib/views/class-groups-shortcodes.php changing “user_login” to “display_name” after each update so user’s display names are shown. It would be nice if one of the options included the choice of which to display.


    • Kento November 10, 2018 at 10:42 am #

      Hi Louis,

      Instead of modifying Groups’ code itself it’s much easier to simply derive your own version of the shortcode by implementing it within a small plugin. Create a version which differs in name though in order to avoid a clash with the original one. You can find an example here for one of the shortcodes:


  10. Jason November 5, 2018 at 12:27 am #

    I am trying to find a way to “modify” the groups_member shortcode but i cannot seem to get it to work.

    What i want is to be able to add some extra content to the shortcode so that when its being used its not just cutting off the content but rather cutting it off and adding an “unlock” icon and some text.

    we implemented the plugin on an onine digital subscription site, so we have a teaser of content and then the groups plugin locks down the rest of it. We currently have edited the plugin directly to add an else{ do some stuff like add an icon and link and some text} to the end of the shortcode function, but I really would like to add this code to the child theme in order to save the hassle of editing the plugin directly every time.

    remove_shortcode and add_shortcode don’t seem to work in this instance either… any help is much appreciated.

    • Kento November 10, 2018 at 10:22 am #

      Hi Jason,

      I can recommend to have a look at this implementation of a version of the shortcode – it’s a plugin off which you can easily derive your version without the need to hack Groups itself. Just make sure to give the shortcode a unique variation name so it doesn’t conflict with the original one.


      • Jason November 15, 2018 at 6:33 pm #

        The issue is that we have 1000’s of posts using the standard shortcode… so i would have to go back and change all of them instead of just requesting that the wordpress developer use filters in their plugins…

        • Kento November 16, 2018 at 4:12 pm #

          A filter could be a good idea but it’s very easy to change the shortcode used for you with a simple SQL query replacing matches of “[groups_member” with “[your_shortcode”. Even if we were going to add a filter, if you are using a version that is specific to your site, a custom shortcode might be simpler to handle and would be more intuitive. As you initially mentioned that you are trying to modify the shortcode which I can’t recommend, using the replacement and a custom version is a more straight-forward and quicker option.

          • Jason November 16, 2018 at 4:45 pm #

            I am not trying to “modify” a shortcode. I am trying to “extend” its functionality.

            Something that is pretty much standard practice for plugin creation in wordpress, is the creation of extensible plugins (or at least its highly recommended and rarely done ).

            I can very easily create my own shortcode to perform what i need done(i have) and then search and replace my database to use that shortcode instead of the one in your plugin(debating if its worth it), but at that point i can also just create the lock feature in that shortcode and remove your plugin.(if that’s all that it is offering)

            My comment was more to recommend that as a plugin creator, using extensible plugins and filters for creating the plugins, would make your plugin much more useful to the masses.

            Hey our plugin cuts off the content you don’t want people to see, or hey our plugin cuts off the content, and here is an example of a filter you can use to add a lock icon, a link to request more information, etc all from our great plugin.. are two very different things.

            At that point you open your plugin to the masses that also create custom implementations of things that you may not have thought of when you created your plugin. They whip up a small plugin themselves that extends yours and bam, now you have a whole new community of people using it. I mean a perfect example is woocommerce. By itself its an ok plugin… but since its extensible, there are literally 1000s of implementations using add on plugins to tweak its features.

            Anyways, Thank you for the recommendation, and hopefully none of this comes off as rude, I am simply offering an opinion on a feature that would be very useful to many of the sites we build.

            • Kento November 22, 2018 at 9:36 am #

              Hi Jason,

              Thanks for your reply and the suggestions. Don’t worry, I really appreciate it that you have taken the time to explain your points.

              Actually Groups is designed with extension in mind, and among the thousands of installations there are many that are doing exactly that. If you check out the API section of the documentation you will see that there are actions and filters provided. I am sure that we can have more filters, such as to cover the case you have suggested.

              For this particular case I think it would just be quicker and more efficient for you to have the customized shortcode – based on the initial question, it seemed that you were looking for a way to modify the Groups core code itself which I was trying to suggest to avoid.

              I will add the suggested filter to our todo list, in case you would like to suggest an implementation please feel free to fork and open a pull request with the suggested filter added:


  11. Sally Law November 8, 2018 at 9:07 am #

    Hi I need advice. I am looking to create a site that is a magazine/ blog that showcases different artists work. I want the reader to be able to buy the product from the artist/ designer directly. By clicking on a link or image or so on. I would like this to take them to a place of sale. This means I want the artist( seller) to be able to create their own page or ‘section’ of the site. They need to be able to manage the inventory and send the goods and so on. I just want a percent for facilitating the sale. I thought to create a multisite network and get artists to create their own ‘shop’ within the net work. However I am wondering if there is a simpler way? It’s also possible that the seller(artist) will already have a website and won’t want to have to manage two. So perhaps Affilate links will be what I need. Any advice or direction as to how to go about even one of these concepts would be appreciated.

    Thank you

    • Kento November 10, 2018 at 10:39 am #

      Hi Sally,

      Besides what I replied to you earlier in response to your email, as I just get to read your comment here I wanted to point you to some additional resources. I’m not sure what connection to Groups we can draw to this but I would recommend to also have a look at the Product Vendors extension for WooCommerce, alternatively Affiliates Products and certainly at WooCommerce Product Search which will be useful to find products in any case.


  12. sachiese November 13, 2018 at 12:14 pm #

    I love your detailed group features but I’m a bit disappointed that we have to use WP default user profile page for subscribers. Do you have any add-ons or features to create custom profile page?

  13. sachiese November 15, 2018 at 1:29 am #

    Thank you for the quick reply! I’ll look into those add-ons.

    Looking forward to the future updates!

  14. Chris Norris November 22, 2018 at 4:27 am #

    I am wondering if its possible to add fields to the admin / group edit screen? If so, how can this be done, in a way that wont get overriden with an update.

    • Kento November 22, 2018 at 8:59 am #

      Hi Chris,

      That’s an interesting question. Groups itself does not provide customizable fields currently, but this is certainly open for suggestions. I suppose you want to attach customized information by group, is that correct? If yes, it could be good to add metadata to groups which people could use easily (similar to postmeta).


  15. Nicolás November 27, 2018 at 1:02 pm #

    Hi, I was wondering, is there a way to make the posts that don’t have a group selected to be hidden from everyone (except users with administrator capabilities and such) until a Group is selected?

    The plugin is awesome, been using it for a while!

    • Kento November 27, 2018 at 4:10 pm #

      Many thanks Nicolás, great to hear that!

      With Groups you would have to assign a group to the posts, otherwise it couldn’t be restricted. You could use a dedicated group for this purpose. As an example, when I am working on a documentation page that I don’t want to be visible yet until it’s finished, I assign it to a group named WIP so our team knows it’s work in progress. When the page is finished I remove the assigned group – that way you can publish the page without the public being able to see it. In your case, you would remove the special group and assign the group you want to be able to see it.


      • Nicolás November 27, 2018 at 5:50 pm #

        Excellent I’ll do that !

        Thanks a lot for the quick reply


  16. Humberto Oceguera December 8, 2018 at 1:28 am #

    Hello guys, I’m having a little problem with the groups plugin and I hope you can help.

    I have a subscription service where Macro Watch Subscribers can access this (Macro Watch) video class and it works just as expected… but when I made a list by taxonomy or term to display all videos by quarter (first quarter 2018) it display the titles of every video only if you’re a Macro Watch subscriber but even with the an statement to filter the way users access this list I can’t find a way to display the list to non registered users.

    Is there a way to do this?

    I’m attaching a Gist link to the code I’m using:

    • Kento December 9, 2018 at 12:27 am #

      Hi Humberto,

      You would want to disable the posts_where filter of the Groups_Post_Access class while you attend to this request. Remember to reinstate them once you’re done. Alternatively you could pull the info from the database directly.

      remove_filter( 'posts_where', array( 'Groups_Post_Access', 'posts_where' ) );
      // get the posts and render the titles ...
      add_filter( 'posts_where', array( 'Groups_Post_Access', 'posts_where' ), 10, 2 );


      • Humberto December 10, 2018 at 8:00 pm #

        I think that did it!…

        Thanks for the fast response 🙂

        • Kento December 10, 2018 at 8:43 pm #

          Great to hear that! 🙂

  17. Vincent H December 11, 2018 at 3:07 pm #


    I just created a new capacity but I do not see how it has been granted rights, for example the permission to put a category. Can you help me ?

    thank you

    • Kento December 17, 2018 at 1:42 pm #

      Hi Vincent,

      I think what comes closest to what you are looking for is the existing capability manage_categories. If you add this capability to a group, the group members will have it.


  18. Rick December 27, 2018 at 2:46 am #

    Can Groups Plugin do this: I manage an organization’s website most of which is open to the public. There is one area that needs to be accessible to members only, ie members/xxx/xxx. I need this whole area to have one sign-in password when someone clicks on “members” on the main menu, however, those who sign in are NOT REGISTERED WITH THE SITE. Instead, they get their password via bulk email to the membership and just enter that when accessing the area. The reason for this is there are over 100,000 members and I couldn’t possibly keep registrations up to date, especially because I would not know who has ceased membership. I sincerely hope there is a way to accomplish this with Groups plugin. Thanks.

    • Kento December 27, 2018 at 12:59 pm #

      Hi Rick,

      I appreciate your consideration of Groups to approach this but based on what you describe, it wouldn’t be a good match. In fact, WordPress already provides a very simple password protection for pages which seems to be more in line with what you describe.

      With Groups you must have a user account on the site and the user must belong to the related group to get access to a protected page. You can see more details on it here

      WordPress’ password protection is described here


  19. Rick December 27, 2018 at 9:12 pm #

    Thanks, Kento for taking the time to reply. Much appreciated. I read your suggested WordPress password page and it will work through more clumsy than the (expiring) plugin we are using now. This will get us across the forced changeover to php7.2. Best wishes for the new year. Rick

    • Kento December 31, 2018 at 12:48 pm #

      Hi Rick,

      I’m happy to hear that this is a solution for you, wishing you a great start into the new year! 🙂

  20. Alex December 31, 2018 at 7:33 pm #

    Hi Kento,

    Thank you for this amazing plugin! I have an online program that allows users 45 days to access the content but the access doesn’t start from the date of purchase but rather from a certain day in the future (so adding a certain number of days access in the Groups WooCommerce plugin won’t work). Is there a way to set the expiration date of a group universally?

    So an example: On February 15, I would like the group “Online Program” to be removed from all Users who have this group in their Groups field, just as if I had come by and deleted it manually.

    Is this possible? Thank you in advance!

    • Kento January 9, 2019 at 3:40 pm #

      Hi Alex,

      Thank you very much for your kind comment!

      To have all users removed from a particular group at a specific date, you currently have two options:

      1) Do it manually – filter the users by group, select all and remove them from the group. See the bulk actions described in the Memberships section of the documentation.
      2) Run a scheduled event which executes a function that does Groups_User_Group::delete( $user_id, $group_id ); for each user in the group.

      The first one is easy to do if you simply want them removed and set yourself a reminder for that date. The second is doing the same but of course you need to code it or have someone code it for you. I hope that this helps a bit!


  21. Brian January 8, 2019 at 6:59 pm #

    Is it possible to add users to a group based on their user role when they register?

  22. jordi sanchez January 22, 2019 at 12:05 pm #


    I have installed your amazing plugin. I would like that when I save my custom post type, depending on the group the publisher belongs to, save the group on custom post type added. Maybe is a problem of my wordpress? I use it with custom post types UI and Advanced Custom Fields plugins.

    Many thanks,

    • Kento January 24, 2019 at 9:31 am #

      Hi Jordi,

      Thanks for your kind comment on Groups!

      You can achieve this by creating a little plugin that acts when a post is saved. You would need to create a hook on the save_post action. You can obtain the groups that the author can use to restrict access using Groups_Post_Access_Meta_Boxes::get_user_can_restrict_group_ids() and for each of the groups obtained, assign them to the post using Groups_Post_Access::create( array( 'post_id' => $post_id, 'group_id' => $group_id ) ).

      I hope that helps!


Leave a Reply to Louis Click here to cancel reply.