Как я могу переименовать роли в установке WordPress мультисайта?

Вопрос или проблема

Как я могу переименовать роли в установке 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');
?>

Пояснение к коду:

  1. Получение ролей: Мы используем get_site_option('wp_user_roles'), чтобы получить все роли для сети Multisite. Это необходимый шаг, так как в подобной установке роли хранятся отдельно от одиночной установки WordPress.

  2. Проверка существования ролей: Проверяем, существуют ли роли administrator и editor. Это делается с помощью оператора isset(). Необходимо убедиться, что роли корректно определены перед их изменением.

  3. Изменение названий ролей: Изменяем названия ролей в массиве $wp_roles. В данном случае мы изменяем роль администратора на «Владелец» и редактора на «Создатель Контента».

  4. Обновление параметров сети: После изменения названий мы используем update_site_option('wp_user_roles', $wp_roles), чтобы сохранить изменения в базе данных.

  5. Добавление действия: Хук network_admin_menu запускает нашу функцию в правильное время в контексте сети. Это обеспечивает правильное функционирование кода.

Заключение:

Убедитесь, что вы тестируете изменения в безопасной среде, прежде чем применять их в своей рабочей установке WordPress Multisite. Если все сделано правильно, названия ролей должны измениться во всех сайтах вашей сети.

Оцените материал
Добавить комментарий

Капча загружается...