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]

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.

Framework

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

Multisite

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

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!

Twitter

Introduction

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.

[/groups_member]

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.

At the moment, the Groups File Access extension for Groups provides the option to set an access limit per file but not per user and day. If you would like to have a look, the documentation provides details on its features.

I’m using GROUPS for a school with 50 teachers.
When one of the teachers logs in, they enter NEW events and then have to categorize the event my Selecting the ‘TEACHER’ Group to make sure NO pupils or public can see the ‘Teacher categorized events’.

The school is nervous that giving the 50 teachers access to this feature gives a WIDE OPEN DOOR for them to enter a NEW EVENT but FORGET to categorize it as a TEACHERS event and thus hide it from the public/pupil eye. Do you know of any way to perhaps AUTO-Catagorize the TEACHERS catagory for any Teacher whose logged in and entering a NEW Event??

On our woocommerce shop, we restrict categories to specific user groups but in the same time, we want to keep open to public all the contents of the categories (since pricing will be hidden to public). Do you have a resolution for this?

On my event pages (using The Events Calendar by Tribe), I have two kinds of tickets (using Event Tickets Plus and WooCommerce), one with a member price, the other with a guest price.

Using the plugin Groups by ithinx, I edit the ticket on its product page to restrict the visibility of that product to the group “Members”, so that on the event page, if someone is not a member of the group “Members”, they cannot see that ticket. This works quite well, except…

Whenever I edit an event that is visible to everyone which has both member and non-member tickets, as soon as I save any revisions to the event, the group restriction of the visibility of the member ticket gets removed so that it is also visible to everyone. (It seems to me that whatever restrictions the event has get transferred to the tickets.) I then have to edit the ticket again on its product page to restrict the visibility. Sometimes I forget to do this, and it costs me money.

This happens the other way around as well: if an event is visible to Members only, the tickets also have their readability restricted to members (which is not a problem, but the other way around is).

Have tested and confirmed this happens on a WordPress site with Twenty Seventeen theme, and just 6 plugins (Event Tickets, Event Tickets Plus, Groups, The Events Calendar, WooCommerce, and “Classic Editor” (disables Gutenberg editing). WordPress and all plugins are up to their most recent versions.

The website given in the form is my test website.

P.S. I have tried assigning the product to a category that is restricted to Members only, and then non-Members cannot see product pages of tickets in that category, but on the event page, non-Members can still see the ticket.

I’m not sure why this happens to be honest, but if you have a protected product and it gets ‘unprotected’, this looks like the restriction gets lost somehow. Given that you are trying this with what seems to me a minimal configuration but still get the issue, it’s probably an incompatibility or an error of some sort that interferes. Have you checked if you get any console errors in the browser by any chance? I’m just wondering if it’s related to a simple thing …

Given that it happens with minimal plugins, and it also happens the other way around (if an event is visible to Members only, tickets with no restrictions also have their readability restricted to Members), it seems to me not to be an incompatibility, but a process design flaw. That is, when the event page is saved, the group restriction properties of the event are applied to all the elements of the event by the plugin. By design. But… is it The Event Calendar plugin or the itthinx plugin that is doing the saving and applying? If it’s yours, then it seems to be an easy (although maybe not high-priority) fix. If it’s the Event Calendar that’s doing that… well, then I’m guessing I’ll get the standard answer from both of you (“we don’t guarantee compatibility”).

While I am a great troubleshooter and pretty good at identifying conflicts and potential causes of problems, that pretty much applies at “high levels” (as opposed to “low levels”) of the tech. So when you ask if I get any console errors in the browser… I’m not a programmer, I wouldn’t know what errors to look for, and I’m not even sure how to go about looking for console errors.

Thanks for your detailed comment on this. We usually try to solve incompatibilities or issues where reasonable and doable, I wouldn’t rule out any further looking into it 🙂

What I was referring to is the browser console. When you use e.g. Firefox and open the developer tools, you get a tab labeled “Console” and you can see any messages produced while the page loads (make sure to reload the page bypassing the cache: Hold down the Shift key and left-click the Reload button). The reason why I am asking is to see if there are any Javascript errors involved – these would show up in the console part …

I would like to create an action that removes a user from a group if/when they click a button. Is there a way to do this? (I’m not a great coder, so I’d appreciate as much detail as you can provide). Thank you!

As it doesn’t currently provide an option to do this on a per-group basis and also doesn’t have a filter implemented that could be used, you would need to create an action hooked on groups_created_user_group that removes the Groups Notifications action on the same hook, unless you want the notification to get through.

I assume that refer to restricting access to sets of products based on groups – you can use the bulk actions available on top of the product list where you will find the access restriction option similar to when you edit a product individually. The Access Control has more information on restricting access if you want to have a look.

Hi there — I just got this plugin today and have to say, it’s very easy to use and the functionality is great! I do have an issue — my [groups_non_member] shortcode isn’t working. Instead, a user not in the group gets an Error 404 message, even though the page uses the shortcode and has a message to display. Any guidance to make the non-member shortcode work? Thanks!

I would assume that you’ve protected the page with a group and placed the shortcode on the same page, in that case, any unauthorized user would not even get to see the content protected by the shortcode because access to the protected page itself isn’t granted.

Hi,
I am using WP All Export jobs triggered by CRON for scheduled data exports from my WooCommerce websites.

When the export jobs are triggered manually, everything works as expected and there are no issues. However, when the job is triggered by CRON only variable products are exported and simple products are not picked up by the job.

After much testing I have identified that this issue appears when the Groups plugin is active on the site. Subsequently, there is something in the plugin that is preventing CRON jobs from accessing all the product types.

I just saw you posted your question here, too – in case you haven’t read my reply over on your post, this is what I recommended:

I don’t see any relation to Groups itself – but the first thing that I would recommend to check is that PHP memory limits are not exceeded. It’s often the case that you get the symptoms you describe when that happens, disabling a plugin reduces the overall memory footprint and then it appears that the plugin was the culprit.

It this is still an issue, try raising the memory limit and check it please. I’ll mark this as resolved but feel free to follow up if you still have issues after trying the suggestion.

Taking your advice I have been in contact with my hosting provider to double the PHP memory allocation and check the PHP error log but we can not find any issue with the PHP memory allocation. Additionally, I am doing my testing with just the minimum number of plugins activated and the root cause remains activation of the Groups plugin.

Could I ask you to take another look into this?

Just to make clear that I have the plugin network activated on a multi-site network, so please take that into consideration during your testing.

I’ve just checked and he has followed up today on the topic. Seems like we couldn’t replicate the issue you get so I would assume it’s an issue with your site’s particular setup. I would recommend to have a look at the installation he mentions and contrast it with your’s. Please follow up with him on the topic in any case.

Thanks for asking! Yes it’s possible, a simple way to let users join a group is by using the [groups_join] shortcode. Let’s assume that you have a group called Yoga and you want to let people join that group, you would simply put [groups_join group="Yoga"] on a page.

I then create a new post (“Hello World”) and add it to the Blue category. Logging in as Mr. Blue, I can see this post; logging in as Ms. Orange, I can’t. This is expected.

But if I then add this post to both the Blue and Orange category, I cannot see the post as either Mr. Blue or Ms. Orange.

I would expect the restriction to work on an “or” basis – since Mr. Blue is in the Blue group and has the blue capability, I expect to see the post, despite it also belonging to the orange category.

Am I doing something wrong? Or is this how we expect this to work? And if so, how *do* I grant a given post to multiple groups at once without hierarchies? (Blue and Orange groups don’t have a hierarchical relationship.)

Yes that seems correct. When you have distinct categories related that require distinct groups to grant access and the user does not satisfy both, it will correctly deny access. If you were to assign both groups to the same category, then the choice would be any of the groups.

On a post, when you restrict by a couple of groups, being a member of one of them is sufficient to view it. The same thing applies to categories, when you restrict a category with two groups, it’s ok to belong to one of those groups to see the related posts.

When you use two different categories that use different groups, then the system will consequently require you to be a member of both.

Yes you can assign groups to several products in bulk, simply use the usual Bulk Actions on top of the table. Optionally, you can use Groups Restrict Categories to handle access restrictions based on categories and other taxonomies.

Love the plugin. Just having an issue with making it work with Ajax Search Pro – one of you guys put some code up to make it work by editing the functions.php file, but I’m STILL seeing group search results in my drop down. The products are blocked, but I can still see them…

Great to hear that you love it! I can highly recommend to use the WooCommerce Product Search search engine, not only does it provide a fully working live search that works beautifully with Groups, it has many other features that you will love. As its lead developer, I can only recommend it!

Converting an existing school WIX web site to a WordPress site. There are a handful of pages that we need to restrict to approved people only (those registered at the school). I would like to initially upload or enter the email addresses for authorized people. But I could live with them registering (which would not get them access to anything more than public) and I would assign them to an “Approved” group which would then grant them access to those restricted pages. My simple question is, would we get an email letting us know that someone registered so that we could review their request and add them to the “Approved” group or let them know their request was denied?

I’d really love to be able to query the MySQL database to see if their email address exists on a registered students record. But can live without that for now. Maybe a future project…

Regarding the registration emails, that’s something WordPress would do automatically, it doesn’t depend on Groups. So when you have a new user register, you would get a notification to the site administrator’s email.

As an efficient solution to import a large amount of users and have them assigned to group(s) automatically upon import, we offer Groups Import Export. This would spare you and them from having to register individually, and as it would be based on your existing list of users, you wouldn’t have to map them manually to the appropriate groups. You would also be able to import different sets and assign them to different groups as needed.

Regarding queries to the database for existing users/emails, you could also use the search function in the Users section of the WordPress dashboard.

Thanks for asking but currently the shortcodes included don’t offer such an option. It’s something we’re working on among other things though, but I can’t really promise on an exact ETA for this type of feature yet.

Many thanks for pointing that one out! I assume that you have WP_DEBUG_DISPLAY defined as true so this is displayed, if you set that to false the notice won’t be displayed. But we should of course take care of it so it isn’t produced at all.

Good question, we’re currently working on the REST API for Groups among other things. Currently it’s not possible to achieve this other than via Groups’ PHP API, so if you’d like to modify things via Python and REST, you’d have to write up your own handler if you need a solution right now.

Is there a way to prevent users who create an account from being automatically assigned to the Registered Group or assigned to a different group upon creating an account? For example, customers who create an account to access the site to purchase via WooCommerce.

The Registered group is always assigned to new users so one can easily address those as a group. This is not something that you would want to remove by design as it serves a very useful purpose. If you need to distinguish registered users by group in combination with purchases via WooCommerce, then you can use Groups WooCommerce which allows you to assign users to groups based on the product purchased.

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.

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 ) ).

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.

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!

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

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.

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.

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.

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.

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.

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).

Many thanks! Good to see that there is more interest in this. Would you be more interested in having this as a simple option on the admin side, or would you also find it useful to have a full integration of the additional data for use/submission on the front end? It would be interesting to know and consider these points for a possible development path … for example, shall we enhance our data model and integrate with popular forms plugins?

I think it could start out simple, maybe only allowing for single line text, radio, checkbox, and dropdown fields. The fields could be set in the admin settings page, so when a user creates a new Group, the custom fields would appear.

In my use case, I would go to the Groups admin settings page and create custom fields for Location (single line text), Start Date (single line text, or jquery datepicker if you want to get fancy 😉 ), and End Date (single line text). So when I go to create a new group, I’ll add the title, description, location, etc.

Then being able to then display that data on the front end to users would be great. We’d display a list of groups that the user belongs to, along with the group location, start date, end date, and any other custom fields that we add.

Regarding integrating with forms plugins, that’d be awesome! I use Formidable Pro pretty extensively, and one of the integrations that has been on my wishlist for a few years is a Groups + Formidable integration. Specifically the Registration add-on. It’d be wonderful to have a user fill out a registration form, and then have a Groups form action that adds them to a group based on some conditional logic.

I really agree with you on the form plugin integrations. Our integration with Gravity Forms has been around for a while, it is very useful for those cases where you need to assign users based on form submissions and registrations. But among the other form plugins for which I would also like to see an integration with Groups, too, Formidable and Ninja Forms are probably highest on my personal preference.

There is an interesting solution for custom fields related to posts from Toolset, it is documented here. Based on what you have described, a similar thing for Groups would be a mature solution. If we were to approach something like that and start off with a more simpler subset that includes the field types you have outlined, it could make sense. Probably the hardest part of it is the funding as I wouldn’t really know how we could justify the effort related to developing it without some sort of budget. Maybe it’s time to look into crowd-funding parts that are really important for those who are using Groups, or maybe someone with an appropriately sized project would be willing to participate in covering the costs. Another form of contributing towards making that happen is obviously to contribute to its development directly with code, writing use cases and documentation. So for anyone who might fall into any of these categories, has a similar interest and is reading this, I’m looking forward to hear anyone’s thoughts.

I’ve seen so many awesome ideas and suggestions for Groups, I’d love to be able to make most of it happen at some point.

@Mary-Ann if you see any chance of contributing to these efforts in any way and which would also help you in your project, please let me know your ideas.

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.

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.

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.

I can recommend to have a look at this implementation of a version of the shortcode https://github.com/itthinx/groups-cmember – 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.

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…

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.

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.

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 http://docs.itthinx.com/document/groups/ 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: https://github.com/itthinx/groups/

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.

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: https://github.com/itthinx/groups-cmember

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.

Heloo,
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!)
ALexis

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: http://docs.itthinx.com/document/groups/access-control/

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.

On https://codex.wordpress.org/Class_Reference/WP_Query 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.

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 https://nl.wordpress.org/plugins/user-menus/)

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.

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.