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

15 июл. 2011 г., 10:53:10
Просмотры: 32.2K
Голосов: 29

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

Редактирование

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

2
Комментарии

Не могли бы вы подробнее рассказать, чего вы хотите достичь?

BjornW BjornW
15 июл. 2011 г. 18:50:43

переименовать название роли пользователя, вот и всё. например, administrator → owner

Sean Lee Sean Lee
15 июл. 2011 г. 20:46:19
Все ответы на вопрос 6
3
49
function change_role_name() {
    global $wp_roles;

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

    // Можно вывести список всех доступных ролей таким образом...
    //$roles = $wp_roles->get_names();
    //print_r($roles);

    // Можно заменить "administrator" на любую другую роль: "editor", "author", "contributor" или "subscriber"...
    $wp_roles->roles['administrator']['name'] = 'Владелец';
    $wp_roles->role_names['administrator'] = 'Владелец';           
}
add_action('init', 'change_role_name');

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

2 сент. 2011 г. 09:31:04
Комментарии

У меня не получилось заставить это работать. Что бы я ни делал, в процессе создания в админке всё равно отображается 'Subscribers'. Похоже, что $wp_roles теперь содержит часть массива [role_objects].

Zeth Zeth
16 мар. 2019 г. 18:06:15

Это дало очень странный результат. Изменилась только первая буква ("Одминистратор")!

Mark Mark
4 июн. 2019 г. 19:19:33

Это решение не обновляет запись в базе данных. Вы изменяете название только для текущего экземпляра, и если это действие не сработает, это может нарушить вашу логику. В классе Wp_Role нет метода для сохранения. Лучший способ - использовать $roles = get_option('user_roles'); $roles['administrator']['name'] = "Owner"; update_option('user_roles', $roles);. Этот код нужно выполнить только один раз.

Jhonatan Villena Jhonatan Villena
9 февр. 2022 г. 05:18:08
2

Если вы используете WordPress версии 4.7 или выше, вы можете сделать это с помощью действия wp_roles_init, например так:

add_action( 'wp_roles_init', static function ( \WP_Roles $roles ) {
    $roles->roles['administrator']['name'] = 'Владелец';
    $roles->role_names['administrator'] = 'Владелец';
} );
12 авг. 2020 г. 20:58:24
Комментарии

Это лучший ответ

OsDev OsDev
31 авг. 2021 г. 22:25:36

Совет: Этот код работает внутри плагина или mu-плагина. Он не работает внутри дочерней темы, так как дочерняя тема загружается слишком поздно для хука wp_roles_init.

Philipp Philipp
24 мар. 2022 г. 18:45:31
0

На самом деле, существует множество способов достичь этого:

С помощью чистого 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'] = "Новое название"
  4. Снова сериализуйте массив – PHP: echo serialize($rolesArray)
  5. Замените содержимое option_value в базе данных на результат из предыдущего пункта

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

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


Или, если вас не волнует значение role_key…

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

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

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

16 июл. 2011 г. 00:04:14
Комментарии

Пытался избежать этого, но, видимо, это самый чистый способ сделать без плагина.

Sean Lee Sean Lee
16 июл. 2011 г. 01:16:21
1

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

define ("WPLANG", "en_GB");

15 июл. 2011 г. 23:41:21
Комментарии

Уже пробовал этот метод, но некоторые выпадающие меню не были переведены.

Sean Lee Sean Lee
16 июл. 2011 г. 01:15:15
0

Вы можете отредактировать это напрямую в вашей базе данных, и изменения будут сохранены на постоянной основе для вашего сайта. Вот где WordPress хранит роли пользователей:

SELECT * from blog_options WHERE option_name = 'blog_user_roles'
13 авг. 2015 г. 20:58:36