s2Member doesn’t currently support Level restriction for independent access, which is what the custom capabilities are for, and it doesn’t support independent access with custom capabilities combined with incremental access as Level does. And that’s what you want to set up: separate courses with one access level that gives access to all. We’re working on improving this soon so it’s possible in a simpler way.
For now, if you use levels for your courses 2 and 3, then you’ll have this situation:
Let’s say course 2 is at level 2 and course 3 at level 3. Then the user with level 2 will have access to course 2, but course 3 will be above his access. The user at level 3, though, will have access to course 3 and also course 2, because course 2 is protected at level 2, which is still an access he has.
You can do a couple of things in this case:
Use conditionals to determine when to show the content of the course. In that case, even if the user can load the page, the content will or won’t be there based on your conditional.
Read example 3 in the Shortcode Conditionals documentation for conditions that match an exact level, please. [hilite path]Dashboard -› s2Member® -› API / Scripting -› Simple/Shortcode Conditionals -> Example 3[/hilite]
The conditional using custom capabilities is what I explained in my previous reply.
The other thing you could do, instead of using the conditionals, is edit the s2Member role you’re selling the users so they don’t have access to every level below theirs. For this you’d use a plugin like User Role Editor. http://wordpress.org/extend/plugins/user-role-editor/
You could have sell s2Member Level 3 for full access and leave that role untouched, so it’ll have access to content at Level 3 and below. But then have a couple lower roles, s2Member Levels 1 and 2 for courses 2 and 3 respectively. Edit each of those s2Member role to remove access to the other levels below it, then each user will have access just to content at its level.
If you need more levels you can add more following the instructions here: [hilite path]Dashboard -› s2Member® -› General Options -› Membership Levels/Labels[/hilite]
Editing the user roles is a customization, and s2Member doesn’t behave that way by default, but it shouldn’t be too hard to figure out. Or just use conditionals as explained above and the documentation.
I hope that helps. :)