Skip to content

Member categories

08 Jun 2011

Member categories

The obvious limitation of ExpressioEngine membership system is that a member can be part of only one membership group. The obvious advantage of categories is that they can intersect. Now, categories meet members with Member categories module!

It can be used to build permissions system on frontend, or to simply categorize your members, or let users save their favorite categories, relate “groups” of members to “groups” of entries - more and more flexibility within your EE site!

The categories used are the same Channel categories that are used for the entries.

You can assign as many categories to every member as you need using module’s control panel.
Is is also possible for members to select their categories on front-end if you have Stand-Alone Member Edit installed.

Check the docs

For support, please email .(JavaScript must be enabled to view this email address).

Changelog RSS

  • v. 1.0 — 2011-08-06 12:41
    • Initial release
  • v. 1.0.1 — 2011-07-07 09:31
    • Fix for errors="off" mode
  • v. 1.1.0 — 2020-09-26 09:15
    • Added multiple categories check
  • v. 1.1.1 — 2020-09-26 09:15
    • Minor big fix
  • v. 1.2.0 — 2020-09-26 09:15
    • Fix for custom category fields
  • v. 1.2.1 — 2020-09-26 09:15
    • Bug fix
  • v. 1.3.0 — 2020-09-26 09:15
    • Pagination for members list
  • v. 1.3.1 — 2020-09-26 09:15
    • Added extension for removal of categories for deleted members
  • v. 1.3.2 — 2020-09-26 09:15
    • Minor bug fix
  • v. 1.3.3 — 2012-05-05 20:16
    • Added category_group parameter to categories tag
  • v. 1.3.4 — 2012-06-05 20:30
    • Added "order_by" and "sort" parameters
  • v. 1.3.5 — 2012-03-08 19:31
    • Pagination fix
  • v. 1.4.0 — 2012-07-09 17:35
    • Frontend categories editing form now included with module
  • v. 1.5.1 — 2020-09-26 09:15
    • Bug fixes
  • v. 1.5.2 — 2020-09-26 09:15
    • Pagination fix for Control Panel
  • v. 1.6.0 — 2014-07-02 16:35
    • Tool to batch assign categories to members
  • v. 1.6.2 — 2014-07-07 15:33
    • Pagination fix for EE 2.8 compatibility
  • v. 1.6.3 — 2015-05-05 09:47
    • EE 2.10 compatibility

Licensing & support terms


  1. Kyle Batson
    Kyle Batson 14 Jul 2011

    This looks promising for some of the functionality I need for an upcoming project. However, I have one additional feature I need. I’m currently using the User Module to send invites and automatically assign those new registrants to a member group using a registration key. What I’d like to is to also add a Member Category during that invite process. If you know of any way that I could make that work, I would be most appreciative. Thank you.

    • Yuri Salimovskiy's avatar
      Yuri Salimovskiy 15 Jul 2011

      Member Categories module does not have any integration features (yet), so it looks like a place for custom coding. I think most effective would be to re-use code from Member Categories in the module that performs registration.

      • Kyle Batson
        Kyle Batson 15 Jul 2011

        Thank you for getting back to me. It looks like I managed to get all of this functionality through Solspace’s User Module after all.

  2. Gregor McKelvie
    Gregor McKelvie 12 Aug 2011

    Hi there,

    I’ve just purchased this add-on. So far I really like it, but I’m coming across a few issues.

    1) usernames in the URL
    I’ve followed your steps here: that highlights how to list entries under the category for the member. I don’t want to have to put the username (or any member details) in the url. Is it possible to do this without stating e.g. username=”{segment_3}”? I’ve tried replacing {segment_3} with member ID and username, but that doesn’t work

    2) Following on from the above, if I am logged in as “client 1” I have the URL:
    If (when logged in as client 1) I change the URL to client2 I can see the list of categories that have been assigned to client 2 (even though I’m logged in as client 1). (I’m hiding the entries using your restrict entry access extension)


    Basically, I don’t want my clients logging into the system and being able to see other clients’ categories (or entries).

    Is this possible?



    • Yuri Salimovskiy's avatar
      Yuri Salimovskiy 17 Aug 2011

      Hi Gregor,
      sorry for the late reply - I was on vacation and missed your comment. For the future, emails to .(JavaScript must be enabled to view this email address) are quicker way to get help.
      Regarding your problem, you can simply omit username parameter to use data of currently logged in user. Is that what you’re trying to achieve?

  3. Linwood Webb
    Linwood Webb 17 Aug 2011

    I also need to know if you can prevent someone from seeing entries outside of their category and maybe show group or category name instead of username.

    • Gregor McKelvie
      Gregor McKelvie 17 Aug 2011

      I also need to know if you can prevent someone from seeing entries outside of their category and maybe show group or category name instead of username.

      Considering I’ve been waiting for 6 days without a response - I’m not too confident! Good luck - drop a line here if you find a solution

    • Yuri Salimovskiy's avatar
      Yuri Salimovskiy 17 Aug 2011

      Hi Linwood,
      you can simply use {exp:member_categories:categories} (omiting username parameter). This will pass username of currently logged in user to the script.
      But I don’t uderstand what you mean saying “maybe show group or category name instead of username”

  4. Gregor McKelvie
    Gregor McKelvie 17 Aug 2011

    Basically I want to create one template (or just a few) that shows content only the user logged in is allowed to see. At the moment, I would need to state the user in the URL, but if I type in another user’s username in the URL then I can see his / her content (or member categories).

    So ideally, if member A has a category assigned called X when A logs in he / she sees on content under X. When member B (who is in category X and Y) then they can see content under X and Y.

    So I need the username=” {tag} ” to pull in the current logged in user from member id or username not from the URL.

    Does that make sense?

  5. Linwood Webb
    Linwood Webb 17 Aug 2011

    I believe you hit it on the head. What I meant by “maybe show group or category name instead of username” was for the url/{segment_3} part. But if it passes the currently logged in user automatically, then that’s my answer. Thanks.

  6. Gregor McKelvie
    Gregor McKelvie 17 Aug 2011

    You will probably want to follow this example
    But do NOT use member_id or username parameters - in that case, member id/username of currently logged in person will be used (this is true for all Member Categories tags)

    Hi Yuri,

    Will that work if I use a standard URL:

    So “product-area” is the top level category and I want the page to display the content of the second-level categories that the member has access to e.g.

    Product-area A has 4 sub categories (1, 2, 3 and 4)

    Member A can see 1, 2, and 3
    Member B can see 3 and 4

    Forgetting about the content (as I can block that using your access module, will all sub-categories display on the page I only want Member B to see categories 3 and 4.

    I reality I have 30 sub categories per product area, so when a client logs in I only want them to see the names of their categories if you see what I mean!

    Thanks - hard to explain over email!

    • Yuri Salimovskiy's avatar
      Yuri Salimovskiy 17 Aug 2011

      You can display categories assigned to member using {exp:member_categories:categories} tag pair. Inside of it, you should check parent_id to see whether it matches desired top level category.
      Alternatively, you could use {exp:channel:categories} loop and check each category whether it’s allowed to be viewed by logged in user (using {exp:member_categories:check} tag)


    Hello, my name is Yuri and I specialize in creating custom add-ons (plugins, modules, extensions) for ExpressionEngine CMS.
    You can reach me anytime by emailing .(JavaScript must be enabled to view this email address)