web-dev-qa-db-fra.com

Masquer le champ de type de message personnalisé de l'auteur?

Pour un site Web d'association professionnelle, j'ai créé une base de données sur les membres à l'aide d'un type de publication personnalisé. Les entreprises s'inscrivent avec un formulaire en ligne, qui crée une publication personnalisée pour cette entreprise. Lorsque l'administrateur reçoit les cotisations du nouveau membre, elle crée un utilisateur WordPress pour cette entreprise et en fait l'auteur de la publication. Cela permet à l'entreprise de mettre à jour ses informations si nécessaire.

Le problème est que ce schéma permet à l'entreprise de mettre également à jour certains champs qu'ils ne devraient pas pouvoir mettre à jour, tels que la date d'expiration. Donc, ce que je veux faire est de cacher ces champs ou de les rendre non modifiables lorsque l'auteur modifie les messages, mais modifiables lorsqu'un administrateur WP modifie le message.

Est-ce que quelqu'un sait comment faire ceci?

5
Dan Romanchik

Le moyen le plus simple consiste à vérifier les capacités avec current_user_can avant d’afficher le champ.

Par exemple, le rôle d'administrateur a la capacité manage_options que vos utilisateurs nouvellement créés n'auront pas. Donc, vous pouvez faire quelque chose comme ça:

<?php
// wherever your fields are...
if(current_user_can('manage_options'))
{
   // display your fields here.
}

Ou, si vous ne souhaitez pas afficher de méta-boîte entière sur la page du type de publication personnalisée, vous pouvez vérifier les fonctionnalités avant de l'ajouter.

<?php
add_action('add_meta_boxes_{YOUR_POST_TYPE}', 'wpse72883_add_box');
function wpse72883_add_box()
{
    if(!current_user_can('manage_options'))
        return; // current user isn't an admin, bail

    // add the meta box here
}

Il pourrait également être utile d’ajouter votre propre capacité de vérification plutôt que d’utiliser une fonction intégrée. Pour donner à votre rôle d’administrateur le edit_business_details...

<?php
$role = get_role('administrator');
if($role)
    $role->add_cap('edit_business_details');

Cela ne doit se produire qu'une seule fois, par exemple lors de l'activation d'un plug-in.

<?php
// some plugin file.
register_activation_hook(__FILE__, 'wpse72883_activate');
function wpse72883_activate()
{
    $role = get_role('administrator');
    if($role)
        $role->add_cap('edit_business_details');
}

Vous pouvez ensuite vérifier cette capacité, tout comme manage_options.

<?php
// wherever your fields are...
if(current_user_can('edit_business_details'))
{
   // display your fields here.
}
2
chrisguitarguy