Czy istnieje sposób zmiany nazwy nazwy roli użytkownika bez wtyczki?

26

Czy istnieje możliwość zmiany nazwy roli użytkownika za pomocą hooka, zamiast używania wtyczki?

Edytować

Na przykład administrator»owner

Sean Lee
źródło
Czy mógłbyś wyjaśnić, co chcesz osiągnąć?
BjornW,
zmień nazwę nazwy roli użytkownika, to wszystko. na przykład administrator -> właściciel
Sean Lee

Odpowiedzi:

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
źródło
Nie mogłem tego uruchomić. Niezależnie od tego, co robię, w procesie tworzenia zaplecza nadal jest nazywany „subskrybentami”. Wygląda na to, że $wp_rolesteraz ma [role_objects]część swojej tablicy.
Zeth
To zrobiło coś bardzo dziwnego. Wpłynął tylko na pierwszą literę („Odministrator”)!
Mark
3

Prostym rozwiązaniem byłoby po prostu dodanie roli użytkownika add_role, w ten sposób możesz nazwać ją jak chcesz i dodać dowolne funkcje. http://codex.wordpress.org/Function_Reference/add_role

Wyck
źródło
Próbowałem tego uniknąć, ale myślę, że to najczystszy sposób na obejście bez wtyczki.
Sean Lee
2

W rzeczywistości istnieje wiele sposobów na osiągnięcie tego:

Za pomocą czystego php i mysql możesz edytować serializowany wpis w bazie danych. Rzeczywiście, Wordpress przechowuje szeregowany szereg ról w wp_optionstabeli.

Więc:

  1. Pobierz szeregowaną tablicę:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Unserializuj ciąg - php: $rolesArray = unserialize($serialized_string)
  3. Zmień nazwę roli - php: $rolesArray['role_key']['name'] = "New name"
  4. Serializuj z powrotem tablicę - php: echo serialize($rolesArray)
  5. Zamień option_valuezawartość db na dane wyjściowe z poprzedniego punktu

Jeśli czujesz się pewnie dzięki Wordpress, możesz nawet użyć wbudowanego narzędzia Wordpress REPL w wp-cli, aby pobrać przechowywaną wartość, get_option('wp_user_roles')a następnie użyć jej update_optiondo aktualizacji.

I (zawsze) pamiętaj, aby wykonać kopię zapasową bazy danych przed manipulacją opcjami;)


W przeciwnym razie, jeśli nie zależy ci na wartości role_key…

… Bardzo łatwo to osiągnąć dzięki wp-cli :

  1. zduplikuj istniejącą rolę - $ wp role create new_role 'New Role' --clone=old_role
  2. usuń stary - $ wp role delete old_role
  3. następnie powiąż new_role z użytkownikiem (użytkownikami).
  4. ostatecznie powtórz krok 1 i 2, aż old_role = new_role
Dharma
źródło
1

Możesz utworzyć niestandardowy plik lokalizacji. Pobierz ten plik: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot i edytuj za pomocą narzędzia PoEdit (na przykład). W następnym kroku zapisz plik lokalizacji jako en_GB.mo (lub inny) i edytuj plik wp-config:

Zdefiniuj („WPLANG”, „en_GB”);

czepol
źródło
1
Próbowałem już tej metody, ale niektóre menu rozwijane nie zostały przetłumaczone.
Sean Lee,
0

Możesz edytować go bezpośrednio w swojej bazie danych i będzie on edytowany na stałe dla Twojej witryny. Tutaj WP zachowuje role użytkowników

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
artnikpro
źródło