問題描述

所以我一直在通過自定義角色進行處理。我會嘗試儘可能的描述,以突出我的問題。在任何人提及之前 – 我想避免使用插件,因為對我來説,我認為是一個簡單的問題是過分的。

我想要的:3 角色 – 管理員,較小的管理員,用户

我最初嘗試的是:我刪除了兩個角色 Author& 貢獻者,離開管理員,編輯和訂閲者。這沒有問題。我有下一個問題 – 重命名剩下的角色。

我本來只是做了最常見的建議

global $wp_roles;
$wp_roles->roles['editor']['name'] = 'Lesser Admin';
$wp_roles->role_names['editor'] = 'Lesser Admin';

對於最後兩個角色 (我保持管理相同,因為它足夠近) 。但這沒有辦法。不管我附加了什麼鈎子 (我把它放在 add_action('init',...)下,但沒有工作。

所以我試圖想起來,寫了我自己的代碼來處理這個問題。

function permissionsModification(){
    $blogs = wp_get_sites();
    $current_blog = get_current_blog_id();

    foreach($blogs as $blog):

        switch_to_blog($blog['blog_id']);

        if(get_role('author') !== null)
            remove_role('author');

        if(get_role('contributor') !== null)
            remove_role('contributor');

        $toChange = array(
            'editor' => array('lesser', 'Lesser Admin'),
            'subscriber' => array('user', 'User')
        );
        foreach($toChange as $old => $new):

            $role = get_role($old);
            if($role !== null):

                if(get_role($new[0]) === null)
                    add_role($new[0], $new[1], $role->capabilities);

                $users = get_users(array('role'=>$old));
                foreach($users as $user):
                    $user->remove_role($old);
                    $user->add_role($new[0]);
                endforeach;

                $opt = get_option('default_role');
                if($opt === $old)
                    set_option('default_role', 'administrator');

                remove_role($old);
            endif;

        endforeach;

    endforeach;

    switch_to_blog($current_blog);
}
add_action('init','permissionsModification');

好消息:它確實成功地重命名了角色,老角色已經消失了。

壞消息:發生了一個非常奇怪的錯誤。我在 Capabilities.php 到處都有 「Undefined Index:Name」 錯誤。我搜索數據庫 (有 phpMyAdmin 訪問),並發現在其中一個站點 – 訂户角色仍然存在!我認為這可能與默認角色有關,因此,由於註冊被禁止,我將其設置為管理員進行測試,但仍然沒有骰子 (儘管它確實將其設置為默認角色) 。

查看網絡管理員用户面板顯示一個”empty” 空間,角色應該在哪裏,如果您檢查該元素,則該值具有值訂閲者。所以我很確定用户角色的名字被刪除,這是錯誤來自哪裏。

現在,有趣的部分 – 我隨身穿過這個代碼,print_r 隨處可見,用户角色確實被刪除了。但是我不知道它是如何被添加回來的。我不知道這是否與這個多站點 wordpress 的事實有關,因為用户角色只存在於一個表中。但是我仍然有點迷失如何解決它。

任何意見將不勝感激。

最佳解決方案

所以,感謝凱撒,我得到了解。我不得不做兩件事來做這個工作。

首先,我注意到禁用 WP 用户頭像插件導致錯誤消失。我看到並意識到已經檢查了一個設置,「允許訂閲者和貢獻者編輯他們的化身」 。取消選中並保存每個站點,使錯誤消失。

我必須做的另一件事是,改變不會傳遞到其他網站 (即使錯誤消失),所以我將整個功能從主題轉移到 mu-plugins 文件夾中的插件。這使得它一直運行 (對於每個站點),所以所有的更改都是無錯誤地發生。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。