Вопрос или проблема
Как я могу переименовать роли в установке WordPress мультисайта?
function wpmudev_custom_change_role_names_multisite() {
// Получаем роли сети
$wp_roles = get_site_option('wp_user_roles');
// Проверяем, существуют ли роли
if ( isset( $wp_roles['wqer'] ) && isset( $wp_roles['editor'] ) ) {
// Изменяем имена
$wp_roles['wqer']['name'] = 'Владелец';
//$wp_roles['wqer']['capabilities']['manage_network'] = true; // Добавить возможность для мультисайта
$wp_roles['editor']['name'] = 'Создатель Контента';
// Обновляем роли в сети
update_site_option('wp_user_roles', $wp_roles);
}
}
add_action('init', 'wpmudev_custom_change_role_names_multisite');
Эта функция работает только для простой установки WordPress. Я хочу применить эту же функцию, но в WordPress мультисайте.
Я внес небольшие изменения, которые могут помочь вам достичь желаемых результатов. Нам нужно использовать хук network_admin_menu
вместо init
, а также обновили условие проверки существования ролей.
<?php
function wpmudev_custom_change_role_names_multisite() {
// Здесь мы получаем роли сети.
$wp_roles = get_site_option('wp_user_roles');
// Здесь мы проверяем, существуют ли роли.
if ( isset( $wp_roles['administrator'] ) && isset( $wp_roles['editor'] ) ) {
// Изменяем имена
$wp_roles['administrator']['name'] = 'Владелец';
$wp_roles['editor']['name'] = 'Создатель Контента';
// Здесь мы обновили роли в сети.
update_site_option('wp_user_roles', $wp_roles);
}
}
add_action('network_admin_menu', 'wpmudev_custom_change_role_names_multisite');
Ответ или решение
Чтобы изменить названия ролей в установке WordPress Multisite, вам нужно использовать подходящий фильтр и правильно проверить существование ролей. Вот как это сделать с использованием функции wpmudev_custom_change_role_names_multisite
:
<?php
function wpmudev_custom_change_role_names_multisite() {
// Получаем роли сети
$wp_roles = get_site_option('wp_user_roles');
// Проверяем, существуют ли роли
if ( isset( $wp_roles['administrator'] ) && isset( $wp_roles['editor'] ) ) {
// Изменяем названия
$wp_roles['administrator']['name'] = 'Владелец';
$wp_roles['editor']['name'] = 'Создатель Контента';
// Обновляем роли в сети
update_site_option('wp_user_roles', $wp_roles);
}
}
// Используем хук network_admin_menu для изменения ролей в нескольких сайтах
add_action('network_admin_menu', 'wpmudev_custom_change_role_names_multisite');
?>
Пояснение к коду:
-
Получение ролей: Мы используем
get_site_option('wp_user_roles')
, чтобы получить все роли для сети Multisite. Это необходимый шаг, так как в подобной установке роли хранятся отдельно от одиночной установки WordPress. -
Проверка существования ролей: Проверяем, существуют ли роли
administrator
иeditor
. Это делается с помощью оператораisset()
. Необходимо убедиться, что роли корректно определены перед их изменением. -
Изменение названий ролей: Изменяем названия ролей в массиве
$wp_roles
. В данном случае мы изменяем роль администратора на «Владелец» и редактора на «Создатель Контента». -
Обновление параметров сети: После изменения названий мы используем
update_site_option('wp_user_roles', $wp_roles)
, чтобы сохранить изменения в базе данных. - Добавление действия: Хук
network_admin_menu
запускает нашу функцию в правильное время в контексте сети. Это обеспечивает правильное функционирование кода.
Заключение:
Убедитесь, что вы тестируете изменения в безопасной среде, прежде чем применять их в своей рабочей установке WordPress Multisite. Если все сделано правильно, названия ролей должны измениться во всех сайтах вашей сети.