Je fabrique un système où je délègue beaucoup de fonctionnalités au début d’un système utilisant Wordpress. J'ai énuméré tous les rôles (la plupart des personnalités) et j'ai besoin de la possibilité pour un utilisateur connecté de modifier le nom du rôle ou de le supprimer.
Je ne trouve aucune fonction WP normale à cet effet, ni aucun plugin permettant la solution simple dont j'ai besoin. Je pensais donc que je devrais peut-être exécuter une requête MYSQL pour modifier les informations, mais .. avez-vous vu la Table wp_options avec les informations de rôle d'utilisateur? C'est un gâchis énorme et je ne veux pas vraiment détruire le système.
Aucune suggestion?
Merci d'avance.
Il y a toute une foule de fonctions spécialement conçues à cet effet;
http://codex.wordpress.org/Function_Reference#User_and_Author_Functions
D'intérêt particulier (mais non limité à) sont,
add_cap
add_role
get_role
map_meta_cap
remove_cap
remove_role
Ainsi que de nombreuses autres fonctions liées aux utilisateurs qui vous permettront de vérifier/valider leur autorité en fonction de votre scénario de cas d'utilisation, etc.
En regardant dans wp-includes/capabilities.php
vous pouvez voir que les noms de rôle sont contenus dans un tableau, donc quelque chose à l'effet de,
add_action('init', 'update_role_name');
function update_role_name(){
global $wp_roles;
$wp_roles->roles['subscriber']['name'] = 'member';
$wp_roles->role_names['subscriber'] = 'member';
}
Peut-être besoin d'un peu de peaufinage car cela n'a pas été testé.
Modifier:
Je viens de trouver ceci: est-il-chemin-pour-renommer-utilisateur-rôle-nom-sans-plugin - check it out. Pratiquement identique à ce que je suggère mais à l'exception de l'instanciation de la classe et de la vérification que la variable $wp_roles
est réellement définie/définie. Je suppose que cela fonctionne sur la base du fait que son marquage est correct, mais naturellement, testez-le pour confirmer.
Mais de la même manière, en regardant ce qui suit, qui est tiré directement du fichier d’installation principal wp-includes/capabilities.php
ligne 133,
/**
* Add role name with capabilities to list.
*
* Updates the list of roles, if the role doesn't already exist.
*
* The capabilities are defined in the following format `array( 'read' => true );`
* To explicitly deny a role a capability you set the value for that capability to false.
*
* @since 2.0.0
* @access public
*
* @param string $role Role name.
* @param string $display_name Role display name.
* @param array $capabilities List of role capabilities in the above format.
* @return null|WP_Role WP_Role object if role is added, null if already exists.
*/
function add_role( $role, $display_name, $capabilities = array() ) {
if ( isset( $this->roles[$role] ) )
return;
$this->roles[$role] = array(
'name' => $display_name,
'capabilities' => $capabilities
);
if ( $this->use_db )
update_option( $this->role_key, $this->roles );
$this->role_objects[$role] = new WP_Role( $role, $capabilities );
$this->role_names[$role] = $display_name;
return $this->role_objects[$role];
}
...nous pouvons voir,
Met à jour la liste des rôles, s'il n'existe pas déjà.
add_role( $role, $display_name, $capabilities = array() )
... par conséquent, la mise à jour de l'argument $ display_name d'un rôle existant aura le même effet souhaité sans que le rôle soit réellement modifié de manière à préserver les utilisateurs associés au rôle.
Ne fonctionne pas avec ce gâchis
Ouvrez le fichier "wp-includes/capacités.php"
A l'intérieur, il y a 3 classes "WP_Roles", "WP_Role" & "WP_User"
Ces 3 classes sont capables de gérer facilement toutes les fonctionnalités liées aux rôles et fonctionnalités de l'utilisateur.