Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

OK I'm looking for the best way to attack this.

I'm very comfortable with PHP and making custom post types with custom meta fields in WordPress.

Here is what I'm looking at doing:

  1. User registers and is set at subscriber by default.
  2. User requests from admin to have permission to custom post type.
  3. Admin assigns user to another permission name like "Shop Owner".
  4. User can now see custom post type and can make an entry to this post type.
  5. User can only see and edit their own post.

I need help on the following:

  1. How to create a new "Role" called "Shop Owner",
  2. How to give the correct permission to said role to only see and have access to custom post type.
  3. Only allow user to see and edit their own posts to this custom post type.

Ideally I would prefer this was all done from the wp-admin but I'm guessing that I might need to build a front end for this to get the finite control I'm after.

Any input is greatly appreciated.

Kind Regards

share|improve this question

3 Answers 3

up vote 9 down vote accepted

Use Justin Tadlock's plugin "Members". It gives you the ability to create new roles and edit existing roles, as well as add custom capabilities. All that work that you'd have to do can be taken down to a few clicks.

I know you said in your comment on ZaMoose's answer that you are 'looking to write the functionality myself so I have full control over everything.' That's missing the whole point of open source software. Justin Tadlock released his plugin so you could use it precisely so you WOULD have complete control over everything.

If you really really want to reinvent the wheel, potentially wasting hundreds of hours of your own time I can't stop you, but you could at least save yourself the trouble and use Tadlock's plugin to learn how to do what you want.

Once you have a plugin that does what you want, you'll need to change the 'map_meta_cap' flag to true and the 'capability_type' flag in your post type registration function so that it says something other than 'post', 'page', or any other 'reserved' type. Then, duplicate all the capabilities related to posts (e.g. edit_posts, edit_others_posts, publish_posts, etc.), using your capability type instead of posts. Make sure to assign all these permissions to administrators (you won't be able to see the post type until you do this), then create your role, mimicking the 'contributor' role's abilities for your post type.

For example, say your capability type was foobars, you would want to give 'shop owners' the edit_foobars, delete_foobars, and read capabilities. That way they can create their own draft foobars, and delete those drafts, but because they don't have publish_foobars capabilities, they have to submit them for approval. Because they don't have edit_published_foobars, all modifications to an approved foobar have to be approved.

share|improve this answer
    
OK im using Members plugin now to get a jist of how member permissions work. I have set 'map_meta_cap' => true and 'capability_type' => 'shopowner' on my custom post type. I have created a new role called ShopOwner and given it the capabilities of read, edit_shopowner, delete_shopowner. Set a user to the role of ShopOwner and logged in with that user. That user cannot see the custom post type. Have I missed something? –  Brady Apr 12 '11 at 16:33
1  
change those to edit_shopowners and delete_shopowners. edit_shopowner and delete_shopowner are meta capabilities that are never actually checked against. They're checked when somebody tries to edit or delete a specific item, and end up checking things like "Can this user delete these types of items? Can they only delete their own or others too? can they delete published items?" etc. –  John P Bloch Apr 12 '11 at 16:43
    
I couldnt make any sense of that... but I got the functionality I'm after by setting capabilities in my custom post type and creating those capabilities in members plugin. I've awarded you the answers as your post was the most useful for me to piece a solution together. Thanks –  Brady Apr 12 '11 at 17:03

The register post type has a parameter called "capabilities" so you can have for instance

'capability' => __('organize_shop'),

http://codex.wordpress.org/Function_Reference/register_post_type

To create a new user/role/capability you can use add_role, add_cap, for a simple example to get you started:

add_role( 'shop_owner', 'Shop Owner', array( 'edit_posts' => true, ) );
$wp_roles->add_cap( 'Shop Owner', 'organize_shop' );
$role->add_cap( 'organize_shop' );
share|improve this answer
    
hmm... I'm a bit confused what's the difference between 2 and 3 lines? :S Doesn't it add the same capability to the 'Shop Owner'role? –  dashaluna Sep 13 '11 at 11:36
    
Yes they are the the same but they show diff ways to do it, first one includes the role as first parameter ( Shop Owner), second one just the cap since it is using $role. –  Wyck Sep 13 '11 at 11:43

Have you considered looking at Gravity Forms or TDO Mini Forms to handle the actual content submission? They each have functionality that would get you well down the road towards sanely handling user-submitted content.

share|improve this answer
    
Thanks for replying but these are not what I'm looking for. Mainly because these are plugins. I am looking to write the functionality myself so I have full control over everything. –  Brady Apr 12 '11 at 14:09

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.