Est-il possible de renommer le nom du rôle utilisateur sans plug-in?

26

Est-il possible de renommer un nom de rôle d'utilisateur via un hook, au lieu d'utiliser un plugin?

modifier

Par exemple, administrator»owner

Sean Lee
la source
Pourriez-vous nous expliquer ce que vous voulez réaliser?
BjornW
renommer le nom du rôle utilisateur, c'est tout. par exemple, administrateur -> propriétaire
Sean Lee

Réponses:

44
function change_role_name() {
    global $wp_roles;

    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();

    //You can list all currently available roles like this...
    //$roles = $wp_roles->get_names();
    //print_r($roles);

    //You can replace "administrator" with any other role "editor", "author", "contributor" or "subscriber"...
    $wp_roles->roles['administrator']['name'] = 'Owner';
    $wp_roles->role_names['administrator'] = 'Owner';           
}
add_action('init', 'change_role_name');

http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Ján Bočínec
la source
Je n'ai pas pu faire fonctionner ça. Indépendamment de ce que je fais, cela s'appelle toujours «Abonnés» dans le processus de création de backend. Il semble que cela $wp_rolesait maintenant une [role_objects]partie de son tableau.
Zeth
Cela a fait quelque chose de très étrange. Cela n'a affecté que la première lettre ("Odministrator")!
Mark
3

Une solution simple serait d'ajouter simplement un rôle d'utilisateur à l'aide de add_rolecette façon, vous pouvez le nommer comme vous le souhaitez et ajouter les capacités que vous souhaitez. http://codex.wordpress.org/Function_Reference/add_role

Wyck
la source
J'ai essayé d'éviter cela, mais je suppose que c'est la façon la plus propre de se passer de plugin.
Sean Lee
2

En fait, il existe de nombreuses façons d'y parvenir:

Avec pur php et mysql, vous pouvez modifier l'entrée sérialisée dans la base de données. En effet, Wordpress stocke le tableau sérialisé de rôles dans une wp_optionstable.

Alors:

  1. Récupérez le tableau sérialisé:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Annuler la sérialisation de la chaîne - php: $rolesArray = unserialize($serialized_string)
  3. Modifiez le nom du rôle - php: $rolesArray['role_key']['name'] = "New name"
  4. Sérialiser le tableau - php: echo serialize($rolesArray)
  5. Remplacer le option_valuecontenu de la base de données par la sortie du point précédent

Si vous vous sentez en confiance avec Wordpress, vous pouvez même utiliser le Wordpress REPL intégré dans wp-cli pour récupérer la valeur stockée avec get_option('wp_user_roles')puis utiliser update_optionpour la mettre à jour.

Et (toujours) n'oubliez pas de sauvegarder la base de données avant la manipulation des options;)


Sinon, si vous ne vous souciez pas de la valeur de role_key…

… Il est très facile d'y parvenir avec wp-cli :

  1. dupliquer le rôle existant - $ wp role create new_role 'New Role' --clone=old_role
  2. supprimer l'ancien - $ wp role delete old_role
  3. associez ensuite new_role aux utilisateurs.
  4. éventuellement répéter les étapes 1 et 2 jusqu'à old_role = new_role
Dharma
la source
1

Vous pouvez créer un fichier de localisation personnalisé. Obtenez ce fichier: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot et modifiez-le à l'aide de l'outil PoEdit (par exemple). À l'étape suivante, enregistrez le fichier de localisation en en_GB.mo (ou autre) et modifiez le fichier wp-config:

define ("WPLANG", "en_GB");

czepol
la source
1
J'ai déjà essayé cette méthode, mais certains menus déroulants n'ont pas été traduits.
Sean Lee
0

Vous pouvez le modifier directement dans votre base de données et il sera modifié en permanence pour votre site Web. Voici où WP conserve les rôles d'utilisateur

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
artnikpro
la source