web-dev-qa-db-fra.com

Mettre à jour le rôle de l'utilisateur

Je développe un plugin qui ajoute un nouveau rôle d'utilisateur (rôle client, par exemple). Ce rôle étend uniquement le rôle admin pour le moment.

add_role(
    'client',
    __('Client'),
    get_role('administrator')->capabilities
);

Maintenant, je ne veux pas publier une nouvelle version du plugin qui met à jour les capacités du client et supprime la capacité install_plugins.

Les rôles sont persistants, je ne peux donc pas simplement mettre à jour mon add_role.

Ma question est la suivante: Comment puis-je gérer un rôle personnalisé en mettant à jour ses fonctionnalités?

1
Maxwell s.c

De mémoire, vous devriez pouvoir faire quelque chose comme ceci:

$role = get_role( 'client' );

if ( $role && $role->has_cap( 'install_plugins' ) ) {
  // Role not updated yet, so update it.
  $role->remove_cap( 'install_plugins' );
}

get_role() renvoie un objet WP_Role en cas de succès et WP_Role::remove_cap() appelle WP_Roles::remove_cap(), qui met à jour directement l'option dans la base de données. La vérification $role->has_cap() s'assure que le code n'est pas exécuté deux fois.

L'exécuter dans une fonction liée à init devrait suffire.

Idéalement, vous devriez avoir une option de version de base de données pour votre plugin que vous pourriez utiliser pour exécuter du code une seule fois par mise à jour du plugin. Sinon, votre code est exécuté à chaque fois que quelqu'un ajoute manuellement la capacité install_plugins à votre rôle. Ce n'est pas forcément mauvais, mais ça pourrait être évité :-)

Référence du code:

2
swissspidy