Есть ли способ переименовать имя роли пользователя без плагина?

26

Есть ли способ переименовать имя роли пользователя через ловушку вместо использования плагина?

редактировать

Например, administrator»owner

Шон Ли
источник
Не могли бы вы уточнить, чего вы хотите достичь?
BjornW
переименуйте имя роли пользователя, вот и все. например, администратор -> владелец
Шон Ли

Ответы:

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/

Ян Бочинец
источник
Я не мог заставить это работать. Независимо от того, что я делаю, в процессе создания бэкэнда он все еще называется «Подписчики». Похоже, что $wp_rolesтеперь есть [role_objects]часть его массива.
Зет
Это сделало что-то очень странное. Это затронуло только первое письмо («Одминистратор»)!
Марк
3

Простым решением было бы просто добавить роль пользователя, используя ее add_role, чтобы вы могли называть ее по своему усмотрению и добавлять любые нужные вам возможности. http://codex.wordpress.org/Function_Reference/add_role

Уик
источник
Пытался избежать этого, но я думаю, что это самый чистый способ обойтись без плагина.
Шон Ли
2

На самом деле, есть много способов добиться этого:

С чистым php и mysql вы можете редактировать сериализованную запись в БД. Действительно, Wordpress хранит сериализованный массив ролей в wp_optionsтаблице.

Так:

  1. Получить сериализованный массив:
    SELECT option_value as serialized_string FROM wp_options WHERE option_name = 'wp_user_roles';
  2. Отменить сериализацию строки - php: $rolesArray = unserialize($serialized_string)
  3. Измените имя роли - php: $rolesArray['role_key']['name'] = "New name"
  4. Сериализовать обратно массив - php: echo serialize($rolesArray)
  5. Заменить option_valueсодержимое БД с выводом из предыдущей точки

Если вы уверены в Wordpress, вы можете даже использовать встроенный Wordpress REPL в wp-cli, чтобы извлечь сохраненное значение, get_option('wp_user_roles')а затем использовать update_optionдля его обновления.

И (всегда) не забудьте сделать резервную копию базы данных перед манипуляциями с опциями;)


В противном случае, если вам не важно значение role_key…

… Это очень легко сделать с помощью wp-cli :

  1. дублировать существующую роль - $ wp role create new_role 'New Role' --clone=old_role
  2. удалить старый - $ wp role delete old_role
  3. затем свяжите new_role с пользователем (-ями).
  4. в конечном итоге повторите шаги 1 и 2, пока old_role = new_role
дхарма
источник
1

Вы можете создать собственный файл локализации. Получите этот файл: http://svn.automattic.com/wordpress-i18n/pot/trunk/wordpress.pot и отредактируйте его с помощью инструмента PoEdit (например). На следующем шаге сохраните файл локализации как en_GB.mo (или другой) и отредактируйте файл wp-config:

define ("WPLANG", "en_GB");

czepol
источник
1
Уже попробовал этот метод, но некоторые выпадающие меню не были переведены.
Шон Ли
0

Вы можете редактировать его прямо в вашей БД, и он будет редактироваться навсегда для вашего сайта. Здесь WP хранит пользовательские роли

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
artnikpro
источник