Apakah ada cara untuk mengganti nama peran pengguna tanpa plugin?

26

Apakah ada cara mengubah nama peran pengguna melalui hook, alih-alih menggunakan plugin?

Edit

Sebagai contoh, administrator»owner

Sean Lee
sumber
Bisakah Anda menguraikan apa yang ingin Anda capai?
BjornW
ganti nama peran pengguna, itu saja. misalnya, administrator -> pemilik
Sean Lee

Jawaban:

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
sumber
Saya tidak bisa melakukan ini. Terlepas dari apa yang saya lakukan, maka itu masih disebut 'Pelanggan' dalam proses pembuatan backend. Sepertinya $wp_rolessekarang memiliki [role_objects]bagian dari array itu.
Zeth
Ini melakukan sesuatu yang sangat aneh. Itu hanya memengaruhi huruf pertama ("Odministrator")!
Tandai
3

Solusi sederhana adalah dengan hanya menambahkan peran pengguna menggunakan add_role, dengan cara itu Anda bisa menamainya apa pun yang Anda inginkan dan menambahkan kemampuan apa pun yang Anda inginkan. http://codex.wordpress.org/Function_Reference/add_role

Wyck
sumber
Sudah mencoba menghindari ini, tapi saya rasa ini adalah cara terbersih untuk dilakukan tanpa plugin.
Sean Lee
2

Sebenarnya, ada banyak cara untuk mencapai itu:

Dengan php murni dan mysql Anda dapat mengedit entri berseri di db. Memang, Wordpress menyimpan array peran serial dalam wp_optionstabel.

Begitu:

  1. Ambil larik serial:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Batalkan daftar string - php: $rolesArray = unserialize($serialized_string)
  3. Ubah nama peran - php: $rolesArray['role_key']['name'] = "New name"
  4. Serialisasi kembali array - php: echo serialize($rolesArray)
  5. Ganti option_valuekonten db dengan output dari titik sebelumnya

Jika Anda merasa yakin dengan Wordpress, Anda bahkan dapat menggunakan REPL Wordpress yang tertanam di wp-cli untuk mengambil nilai yang tersimpan dengan get_option('wp_user_roles')dan kemudian menggunakannya update_optionuntuk memperbaruinya.

Dan (selalu) ingat untuk membuat cadangan db sebelum manipulasi opsi;)


Jika tidak, jika Anda tidak peduli dengan nilai role_key ...

... sangat mudah untuk mencapainya dengan wp-cli :

  1. duplikat peran yang ada - $ wp role create new_role 'New Role' --clone=old_role
  2. hapus yang lama - $ wp role delete old_role
  3. lalu kaitkan new_role dengan pengguna.
  4. akhirnya ulangi langkah 1 dan 2 sampai old_role = new_role
Dharma
sumber
1

Anda dapat membuat file pelokalan khusus. Dapatkan file ini: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot dan edit menggunakan alat PoEdit (misalnya). Pada langkah selanjutnya simpan file pelokalan sebagai en_GB.mo (atau lainnya) dan edit file wp-config:

define ("WPLANG", "en_GB");

czepol
sumber
1
Sudah mencoba metode ini, tetapi beberapa menu pull down tidak diterjemahkan.
Sean Lee
0

Anda dapat mengeditnya langsung di DB, dan itu akan diedit secara permanen untuk situs web Anda. Di sinilah WP menyimpan peran pengguna

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