WordPress 使用者角色顯示「不指派使用者角色」更新也無效

今天出現個怪問題,在後台變更使用者角色都沒反應,不管設定哪一個角色,都會顯示「不指派使用者角色」,而且沒有錯誤訊息,像什麼事都沒發生一樣

變更使用者角色都沒反應,會顯示「不指派使用者角色」

在使用者列表中的「使用者角色」欄則顯示「未獲指派」,在這情況下,不管我怎麼修改使用者角色都沒有反應,只會顯示「不指派使用者角色」

找問題吧 Debug 開始

往儲存角色資料損毀方向著手,用「phpMyAdmin」開啟網站資料庫,開啟「wp_usermeta」這張表

註:wp_usermeta前面的 wp_ 是可被替換的,請用您安裝WordPress 時的資料表前綴,如果忘記了,可到安裝WordPress 的根目錄中開啟 wp-config.php 其中 $table_prefix 就儲存著安裝時的資料表前綴

打開 wp_usermeta 這張資料表後,按 phpMyAdmin 面板上方搜尋頁籤,在meta_key 欄中輸入「 %_capabilities」按下右下角「執行」按紐,進行資料查詢

「%」為 MySQL的萬用字元

查詢結果列出所有使用者的角色資料

使用者角色資料存在 「wp_capabilities」這個 metadata 中,這個 metadata 比較特別,他的 meta_key 的前端也加上了與資料表一樣的前綴字串

在搜尋結果中發現了一筆資料的 meta_key 長得特別不一樣,這個 meta_key 由大小寫英文混雜組成

修改它,把它全部改成小寫,賓果!!

修改後至使用者編輯頁,變更使用者角色,恢復正常

總結

錯誤原因是資料庫前綴文字大小寫問題造成,中間也許有Bug,不然照理說,若程式區分大小寫,WP後台應該是會找不到角色資料才對,而找不到資料的情況下重新儲存時應該會重新產生一筆正確資料,但事實上沒有也沒有錯誤,所以我覺得應該是一個Bug

另外,這個站其實有透過第三方服務以拷貝的方式產生,在過程中前綴字大小寫不知道在哪個環節錯亂,這也蠻難去查的

所以總結,為避免這個問題,安裝 WordPress 時,輸入的前綴文字,避免使用大小寫夾雜的前綴文字。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料