Gibt es eine Möglichkeit, den Benutzernamen ohne Plug-in umzubenennen?

26

Gibt es eine Möglichkeit, einen Benutzerrollennamen über einen Hook umzubenennen, anstatt das Plugin zu verwenden?

Bearbeiten

Zum Beispiel administrator»owner

Sean Lee
quelle
Könnten Sie näher erläutern, was Sie erreichen möchten?
BjornW
benutzerrollenname umbenennen, fertig. Zum Beispiel Administrator -> Besitzer
Sean Lee

Antworten:

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
quelle
Ich konnte das nicht zum Laufen bringen. Unabhängig davon, was ich mache, wird es im Backend-Erstellungsprozess immer noch als "Abonnenten" bezeichnet. Es sieht so aus, als hätte das $wp_rolesjetzt einen [role_objects]Teil seines Arrays.
Zeth
Das tat etwas sehr Seltsames. Es betraf nur den ersten Buchstaben ("Odministrator")!
Mark
3

Eine einfache Lösung wäre, einfach eine Benutzerrolle mit hinzuzufügen. Auf add_rolediese Weise können Sie sie beliebig benennen und die gewünschten Funktionen hinzufügen. http://codex.wordpress.org/Function_Reference/add_role

Wyck
quelle
Versucht, dies zu vermeiden, aber ich denke, es ist der sauberste Weg, ohne Plugin auszukommen.
Sean Lee
2

Tatsächlich gibt es viele Möglichkeiten, dies zu erreichen:

Mit reinem PHP und MySQL können Sie den serialisierten Eintrag in der Datenbank bearbeiten. In der Tat speichert Wordpress das serialisierte Array von Rollen in einer wp_optionsTabelle.

So:

  1. Holen Sie sich das serialisierte Array:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Den String unserialisieren - php: $rolesArray = unserialize($serialized_string)
  3. Ändern Sie den Rollennamen - php: $rolesArray['role_key']['name'] = "New name"
  4. Serialisieren Sie das Array zurück - php: echo serialize($rolesArray)
  5. Ersetzen Sie den DB- option_valueInhalt durch die Ausgabe vom vorherigen Punkt

Wenn Sie mit Wordpress vertraut sind, können Sie sogar die eingebettete Wordpress-REPL in wp-cli verwenden , um den gespeicherten Wert mit abzurufen get_option('wp_user_roles')und ihn dann update_optionzu aktualisieren.

Und (immer) daran denken, die Datenbank vor der Optionsmanipulation zu sichern;)


Andernfalls, wenn Sie sich nicht für den Wert role_key interessieren ...

… Mit wp-cli ist das ganz einfach :

  1. vorhandene Rolle duplizieren - $ wp role create new_role 'New Role' --clone=old_role
  2. lösche die alte - $ wp role delete old_role
  3. Ordnen Sie dann den Benutzern new_role zu.
  4. Wiederholen Sie ggf. die Schritte 1 und 2, bis old_role = new_role
Dharma
quelle
1

Sie können eine benutzerdefinierte Lokalisierungsdatei erstellen. Laden Sie diese Datei herunter : http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot und bearbeiten Sie sie mit dem PoEdit-Tool (zum Beispiel). Speichern Sie im nächsten Schritt die Lokalisierungsdatei als en_GB.mo (oder eine andere) und bearbeiten Sie die wp-config-Datei:

define ("WPLANG", "en_GB");

czepol
quelle
1
Ich habe diese Methode bereits ausprobiert, aber einige Pulldown-Menüs wurden nicht übersetzt.
Sean Lee
0

Sie können es direkt in Ihrer DB bearbeiten und es wird dauerhaft für Ihre Website bearbeitet. Hier behält WP Benutzerrollen

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
artnikpro
quelle