Est-il possible de laisser un contributeur changer l'auteur de ses propres articles? Je me rends compte que cela les enfermera efficacement dans le poste, c'est ce que je veux. Je veux qu'ils puissent changer l'auteur une fois qu'ils ont terminé l'édition.
capabilities
Michael Rogers
la source
la source
Réponses:
J'ajoute une deuxième réponse parce que ma première approche a été rejetée et que celle-ci n'a pas retenu l'attention.
L'idée est de créer une méta-boîte personnalisée qui répertorie tous les utilisateurs et modifie l'auteur en
save_post
crochet. De cette façon, vous ne jouez pas avec les capacités des utilisateurs et le changement d'auteur se produit lorsque les messages sont déjà enregistrés. Le bénéfice supplémentaire est également que vous pouvez contrôler la liste des utilisateurs disponibles dans la liste déroulante des auteurs. Étapes à suivre:Enregistrer la méta-boîte:
Construisez un balisage pour votre meta box:
Accrochez-vous
save_post
pour enregistrer les données et remplacer l'auteur:REMARQUE N'oubliez pas d'ajouter un champ nonce et de le vérifier lors de la sauvegarde. Vous pouvez également envisager d'utiliser d'autres crochets au lieu de
save_post
, c'est-à-direpre_post_update
ouwp_insert_post_data
, pour traiter les données lors de la sauvegarde initiale.J'espère que cela pourra aider!
la source
Pièges:
Même s'il est possible d'autoriser un auteur (ou contributeur) à affecter un autre auteur à son propre article à l'aide du
user_has_cap
filtre crochet et de certains codes associés, cette approche elle-même est fondamentalement défectueuse . Donc, même si vous prenez toutes les mesures de sécurité nécessaires, c'est toujours une vulnérabilité car elle casse l'architecture des capacités ensemble.Permettez-moi de vous donner un exemple de scénario: disons qu'un utilisateur avec un rôle d'auteur a une intention moins qu'honorable et spams un autre auteur avec beaucoup de messages (peut-être en utilisant un script). La prochaine fois que l'auteur de la destination se connectera, il verra tous ces messages à son nom! Cela continuera car l'autre auteur n'a aucun moyen de l'arrêter! Nous devons donc trouver une approche alternative qui n'a pas ce défaut.
Une meilleure approche:
Si le changement d'auteur est une fonctionnalité nécessaire, alors une meilleure approche consiste à impliquer l'autre auteur (ou un utilisateur plus puissant comme d'autres éditeurs ou administrateurs) dans le processus de changement d'auteur, de sorte que l'auteur initiateur ne puisse pas spammer le auteur de destination.
Pour ce faire, nous laisserons l'auteur initiateur choisir l'auteur de destination dans l'éditeur, mais nous ne changerons pas directement l'auteur du message. Au lieu de cela, au moment du changement d'auteur, nous enregistrerons une méta de publication personnalisée qui enregistrera l'ID de l'auteur de destination. Ensuite, dans le panneau d'administration, nous aurons un sous-menu de publication, où tous les messages avec la demande de changement d'auteur apparaîtront. Seuls l'auteur de destination et les utilisateurs disposant de
edit_others_post
capacités (comme les éditeurs, les administrateurs, etc.) auront accès à cette interface utilisateur de demande de changement d'auteur. À partir de l'interface utilisateur, l'utilisateur disposant d'un accès approprié approuvera la modification et ce n'est qu'alors que la modification finale de l'auteur se produira.Qu'advient-il des publications dans la file d'attente d'approbation?
L'implémentation de CODE peut varier en fonction de l'exigence, cependant, sans aucune autre implémentation de CODE, les auteurs initiateurs pourront modifier la publication ou même annuler la demande de changement d'auteur dans la fenêtre du processus d'approbation. Ils seront exclus de la publication dès que la demande de changement d'auteur sera approuvée.
la source
La liste déroulante de l'auteur ne s'affiche que lorsque l'utilisateur en a la
edit_others_posts
capacité. Cependant, vous ne voulez pas donner cette capacité aux auteurs par défaut, pour des raisons évidentes. La solution consiste à n'accorder cette capacité que dans des circonstances spécifiques, notamment lorsqu'il modifie l'un de ses propres messages. Étant donné que la capacité est écrite dans la base de données, vous devez également vous assurer qu'elle est supprimée sur toute autre page.C'est une question de timing précis. Vous souhaitez modifier la capacité une fois que WP a décidé que le contributeur a le droit de modifier le message, mais avant que le formulaire de la page de modification (
post.php
) ne soit généré. Un crochet approprié estadmin_init
.Comme ça:
Je n'ai pas testé le code, il peut donc être bogué, mais vous avez compris.
la source
J'ai essayé d'obtenir ce dont vous avez besoin en filtrant les méta-capacités des contributeurs et cela semble bien fonctionner. Tout ce que je fais ici est d'ajouter la
edit_others_posts
capacité des contributeurs lorsque WordPress le demande.Cependant, je dirais que c'est une solution un peu hacky pour moi et je ne suis pas sûr que ce soit entièrement sûr. D'après ce que j'ai vérifié après avoir mis mon filtre sur
functions.php
WordPress, les contributeurs ne peuvent pas modifier les messages d'autres utilisateurs dans d'autres contextes que celui que vous avez demandé. Cela semble bien, mais nous ne pouvons pas vraiment vérifier explicitement si l'utilisateur actuel est l'auteur du message actuellement édité (vous ne seriez pas en mesure d'enregistrer le message en tant qu'utilisateur différent si ce contrôle conditionnel était ajouté à la fonction) - que m'inquiète.la source
edit_others_posts
capacité aux auteurs leur permettra essentiellement de modifier les publications des autres. Nous pouvons tout aussi bien faire l'auteur à un éditeur, c'est probablement mieux que de leur donner une capacité plus élevée. La deuxième solution est une possibilité, mais a besoin de plus de travail, à mon humble avis.edit_others_posts
toujours autoriser la modification des publications d'autres utilisateurs. Veuillez tester le code de ma réponse - même avec le filtre en place, la vérification des capacitésif ( ! current_user_can( 'edit_post', $post_id ) )
dans github.com/WordPress/WordPress/blob/… renvoie toujours false. Encore une fois, je suis d'accord que ce n'est pas la solution sûre comme mentionné dans ma réponse, mais j'ai pensé qu'il valait la peine d'être mentionné car cela fonctionne réellement. (désolé pour deux commentaires d'affilée, je n'ai pas respecté la limite de caractères)Tout d'abord, installez le plugin User Role Editor ( https://wordpress.org/plugins/user-role-editor/ ).
Deuxièmement, en utilisant le plugin, créez un nouveau rôle appelé Post Manager, par exemple:
Après avoir créé le nouveau rôle, vous pourrez modifier ses capacités. Maintenant, c'est le moment où vous résolvez votre problème, mais vous devez choisir entre deux options:
(ne vous inquiétez pas encore du rôle de contributeur)
Première:
edit_others_posts
etpublish_posts
.Seconde:
edit_others_posts
.Après avoir décidé, cliquez sur "Mettre à jour". Votre nouveau rôle devrait maintenant avoir la
read
capacité plus celle que vous avez choisie.Maintenant, allez sur votre page de profil utilisateur de contributeur , et à la fin de la page, donnez-leur des rôles supplémentaires (fonctionnalité Editeur de rôle utilisateur):
Désormais, chaque utilisateur qui est un contributeur et un gestionnaire de publication pourra changer l'auteur de la publication des publications non publiées. Et selon votre choix précédent, l'utilisateur peut également publier des articles, et s'ils le font, ils ne peuvent plus éditer l'article.
IMPORTANT!!!
Et juste pour mémoire, par défaut, WordPress ne permet que la
edit_others_posts
possibilité de changer l'auteur du message. Voir https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/class-wp-posts-list-table.php ligne 1483.la source