Autoriser le membre à accéder uniquement au type de publication personnalisé. Autorisation de modifier uniquement ses propres messages

29

OK je cherche la meilleure façon d'attaquer cela.

Je suis très à l'aise avec PHP et je crée des types de messages personnalisés avec des méta-champs personnalisés dans WordPress.

Voici ce que je cherche à faire:

  1. L'utilisateur s'inscrit et est défini par défaut sur l'abonné.
  2. Les utilisateurs demandent à l'administrateur d'avoir l'autorisation de personnaliser le type de publication.
  3. L'administrateur attribue l'utilisateur à un autre nom d'autorisation comme "Propriétaire de la boutique".
  4. L'utilisateur peut désormais voir le type de publication personnalisé et peut saisir une entrée pour ce type de publication.
  5. L'utilisateur peut uniquement voir et modifier son propre message.

J'ai besoin d'aide sur les points suivants:

  1. Comment créer un nouveau "Rôle" appelé "Propriétaire de boutique",
  2. Comment donner l'autorisation correcte audit rôle pour voir et avoir accès uniquement au type de publication personnalisé.
  3. Autorisez uniquement les utilisateurs à voir et à modifier leurs propres publications dans ce type de publication personnalisé.

Idéalement, je préférerais que tout cela soit fait à partir de wp-admin, mais je suppose que je pourrais avoir besoin de créer un front-end pour obtenir le contrôle fini que je recherche.

Toute contribution est grandement appréciée.

Sincères amitiés

Brady
la source

Réponses:

21

Utilisez le plugin " Members " de Justin Tadlock . Il vous donne la possibilité de créer de nouveaux rôles et de modifier des rôles existants, ainsi que d'ajouter des fonctionnalités personnalisées. Tout ce travail que vous auriez à faire peut se résumer en quelques clics.

Je sais que vous avez dit dans votre commentaire sur la réponse de ZaMoose que vous `` cherchez à écrire moi-même la fonctionnalité afin d'avoir le contrôle total sur tout ''. Cela manque tout l'intérêt des logiciels open source. Justin Tadlock a publié son plugin pour que vous puissiez l'utiliser avec précision afin que vous puissiez avoir un contrôle complet sur tout.

Si vous voulez vraiment vraiment réinventer la roue, gaspillant potentiellement des centaines d'heures de votre temps, je ne peux pas vous arrêter, mais vous pourriez au moins vous éviter les ennuis et utiliser le plugin de Tadlock pour apprendre à faire ce que vous voulez.

Une fois que vous avez un plugin qui fait ce que vous voulez, vous devrez changer le 'map_meta_cap'drapeau en trueet le 'capability_type'drapeau dans votre fonction d'enregistrement de type de publication afin qu'il dise autre chose que 'publication', 'page', ou tout autre 'réservé' type. Ensuite, dupliquer toutes les fonctionnalités liées à des postes (par exemple edit_posts, edit_others_posts, publish_posts, etc.), en utilisant votre type de capacité au lieu des postes. Assurez-vous d'attribuer toutes ces autorisations aux administrateurs (vous ne pourrez pas voir le type de publication avant cela), puis créez votre rôle, en imitant les capacités du rôle de `` contributeur '' pour votre type de publication.

Par exemple, supposons que votre type de capacité était foobars, vous voulez donner « propriétaires de magasins » les edit_foobars, delete_foobarset les readcapacités. De cette façon, ils peuvent créer leurs propres ébauches et supprimer ces ébauches, mais comme ils n'ont pas de publish_foobarscapacités, ils doivent les soumettre pour approbation. Parce qu'ils n'en ont pas edit_published_foobars, toutes les modifications apportées à un foobar approuvé doivent être approuvées.

John P Bloch
la source
OK, j'utilise le plugin Members maintenant pour obtenir un aperçu du fonctionnement des autorisations des membres. J'ai défini 'map_meta_cap' => trueet 'capability_type' => 'shopowner'sur mon type de message personnalisé. J'ai créé un nouveau rôle appelé ShopOwneret lui ai donné les capacités de lecture, edit_shopowner, delete_shopowner. Définissez un utilisateur sur le rôle de ShopOwner et connectez-vous avec cet utilisateur. Cet utilisateur ne peut pas voir le type de publication personnalisé. Ai-je raté quelque chose?
Brady
2
changez-les en edit_shopownerset delete_shopowners. edit_shopowneret delete_shopownersont des méta-capacités qui ne sont jamais réellement vérifiées. Ils sont vérifiés lorsque quelqu'un essaie de modifier ou de supprimer un élément spécifique, et finissent par vérifier des choses comme "Cet utilisateur peut-il supprimer ces types d'éléments? Peut-il uniquement supprimer les leurs ou d'autres? Peut-il supprimer les éléments publiés?" etc.
John P Bloch
Je ne pouvais pas comprendre cela ... mais j'ai obtenu la fonctionnalité que je recherche en définissant des capacités dans mon type de message personnalisé et en créant ces capacités dans le plugin des membres. Je vous ai attribué les réponses, car votre message m'a été le plus utile pour reconstituer une solution. Merci
Brady
19

Le type de poste de registre a un paramètre appelé "capacités", vous pouvez donc avoir par exemple

'capability' => 'organize_shop',

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

Pour créer un nouvel utilisateur / rôle / capacité, vous pouvez utiliser add_role, add_cap, pour un exemple simple pour vous aider à démarrer:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );
Wyck
la source
hmm ... je suis un peu confus quelle est la différence entre 2 et 3 lignes? : S N'ajoute-t-il pas la même capacité au rôle "Propriétaire de boutique"?
dashaluna
Oui, ce sont les mêmes, mais ils montrent différentes façons de le faire, le premier inclut le rôle en tant que premier paramètre (propriétaire de la boutique), le second juste le plafond car il utilise $ role.
Wyck
3
Êtes-vous censé traduire une capacité / autorisation? c'est __('');
Svetoslav Marinov
@SvetoslavMarinov J'ai modifié la réponse pour supprimer la traduction.
MikeSchinkel
@dashaluna J'ai édité la réponse pour la clarifier.
MikeSchinkel
1

Avez-vous envisagé de consulter Gravity Forms ou TDO Mini Forms pour gérer la soumission de contenu réelle? Ils ont chacun des fonctionnalités qui vous permettront de bien gérer le contenu soumis par les utilisateurs.

ZaMoose
la source
Merci d'avoir répondu mais ce n'est pas ce que je recherche. Principalement parce que ce sont des plugins. Je cherche à écrire la fonctionnalité moi-même afin d'avoir un contrôle total sur tout.
Brady
0

Un moyen plus simple et efficace pour y parvenir en installant un plugin appelé "Advance Access Manager", vous n'aurez pas à écrire la fonctionnalité mais vous aurez toujours un niveau de contrôle décent sur les utilisateurs, les rôles et ce qu'ils peuvent faire. La plupart des choses que vous voulez peuvent être réalisées par ce plugin.

idiot
la source