WordPress用戶管理:角色與權(quán)限的深度解析
WordPress的用戶管理系統(tǒng)基於角色和權(quán)限。角色是一個包含唯一名稱和一組權(quán)限的實體,每個權(quán)限定義了該角色對平臺特定功能的訪問級別。讓我們深入了解WordPress角色和權(quán)限的工作機制。
關(guān)鍵要點
- WordPress的用戶管理基於角色和權(quán)限。角色擁有唯一名稱和一組權(quán)限,這些權(quán)限定義了角色對平臺不同功能的訪問級別。
- WordPress提供了一個全面的API來定制角色及其權(quán)限。
add_role()
、remove_role()
、add_cap()
和remove_cap()
等函數(shù)可用於管理角色和權(quán)限。但是,使用這些函數(shù)時必須注意數(shù)據(jù)庫訪問和性能。 - 有幾種方法可以避免在處理角色和權(quán)限時出現(xiàn)數(shù)據(jù)庫問題。一種方法是僅在啟用插件時才觸發(fā)代碼,可以使用
register_activation_hook()
函數(shù)。另一種方法是通過設(shè)置$wp_user_roles
全局變量來繞過WordPress數(shù)據(jù)庫。
幕後機制
角色存儲
默認角色和權(quán)限列表可在WordPress Codex上找到。
數(shù)據(jù)庫將此列表存儲在wp_options
表中。
它使用序列化後的wp_user_roles
鍵。
反序列化後的數(shù)據(jù)如下所示:
<code>array( 'administrator' => array( 'name' => '管理員', 'capabilities' => array( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'edit_users' => true, // [...] ) ), 'contributor' => array( 'name' => '投稿者', 'capabilities' => array( 'delete_pages' => true, 'delete_others_pages' => true, 'delete_published_pages' => true, 'delete_posts' => true, // [...] ) ), // [...] );</code>
此元數(shù)據(jù)在安裝新的WordPress站點時會自動設(shè)置。
WordPress啟動時,WP_Roles
類會從數(shù)據(jù)庫加載列表。
這發(fā)生在plugins_loaded
和init
鉤子之間。
將用戶鏈接到角色
WordPress使用存儲在wp_usermeta
表中的meta_key
將用戶鏈接到其角色。
反序列化後,元數(shù)據(jù)如下所示:
<code>array( 'administrator' => true )</code>
請注意,WordPress使用數(shù)組,儘管用戶一次只能擁有一個角色,我們稍後將看到原因。
另外,請記住wp_
是當前博客的前綴。
(我們可以使用$GLOBALS['wpdb']->get_blog_prefix()
函數(shù)獲取它)。
在多站點安裝中,這允許用戶在不同的實例中使用不同的角色:
-
wp_capabilities
=>a:1:{s:13:"administrator";b:1;}
-
wp_10_capabilities
=>a:1:{s:11:"contributor";b:1;}
-
wp_15_capabilities
=>a:1:{s:10:"subscriber";b:1;}
[...]
此規(guī)則也適用於我們之前在wp_options
表中看到的wp_user_roles
條目。
最後,我們可以看到wp_user_level
元數(shù)據(jù)以及角色。
它用於處理舊版WordPress中的角色,現(xiàn)在已棄用。
在核心代碼中使用權(quán)限
我們已經(jīng)了解了角色是如何加載並鏈接到用戶的;從那裡,WordPress能夠在需要時獲取給定用戶的權(quán)限。
一些默認權(quán)限在WordPress核心代碼中是硬編碼的。
例如,加載插件屏幕時,它將通過運行以下代碼來檢查當前用戶是否可以管理插件:
<code>array( 'administrator' => array( 'name' => '管理員', 'capabilities' => array( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'edit_users' => true, // [...] ) ), 'contributor' => array( 'name' => '投稿者', 'capabilities' => array( 'delete_pages' => true, 'delete_others_pages' => true, 'delete_published_pages' => true, 'delete_posts' => true, // [...] ) ), // [...] );</code>
角色永遠不會被硬編碼;角色只是一個權(quán)限包裝器,它只存在於數(shù)據(jù)庫中。
使用角色和權(quán)限:WordPress API
訪問API
WordPress提供以下全局函數(shù)來幫助我們處理角色。
current_user_can()
檢查當前用戶是否擁有所需的權(quán)限。
<code>array( 'administrator' => true )</code>
WP_User::has_cap
檢查特定用戶是否擁有權(quán)限。
<code>if (!current_user_can('activate_plugins')) { wp_die(__('您沒有足夠的權(quán)限來管理此站點的插件。')); }</code>
我們可以注意到current_user_can
使用了此函數(shù)。
get_editable_roles()
返回可編輯的角色。
<code>add_action('init', function() { if (current_user_can('install_plugins')) { echo '您可以安裝插件'; } else { echo '您不能安裝插件'; } });</code>
此列表可能會被editable_roles
過濾器覆蓋,因此我們不應(yīng)依賴此函數(shù)來獲取網(wǎng)站上的完整角色列表。
請注意admin_init
鉤子的使用,因為該函數(shù)尚未在init
鉤子中加載。
get_role()
根據(jù)其slug獲取WP_Role
對象。
<code>add_action('init', function() { $user = get_user_by('slug', 'admin'); if ($user->has_cap('install_plugins')) { echo '管理員可以安裝插件'; } else { echo '管理員不能安裝插件'; } });</code>
WP_Role::has_cap()
檢查角色是否擁有所需的權(quán)限。
<code>add_action('admin_init', function() { $roles = get_editable_roles(); var_dump($roles); });</code>
自定義API
WordPress還提供了一個完整的API來自定義角色及其權(quán)限。
add_role()
在數(shù)據(jù)庫中註冊一個新角色。
<code>add_action('init', function() { $role = get_role('administrator'); var_dump($role); }); // 這將打?。?// WP_Role 對象 // ( // [name] => administrator // [capabilities] => Array // ( // [switch_themes] => 1 // [edit_themes] => 1 // [activate_plugins] => 1 // [edit_plugins] => 1 // [...]</code>
remove_role()
如果存在,則從數(shù)據(jù)庫中刪除所需的角色。
<code>add_action('init', function() { $role = get_role('administrator'); var_dump($role->has_cap('install_plugins')); // 打印 TRUE });</code>
WP_Role::add_cap()
向角色添加權(quán)限。
<code>add_action('init', function() { add_role('plugins_manager', '插件管理員', array( 'install_plugins', 'activate_plugins', 'edit_plugins' )); });</code>
這可以是核心權(quán)限(install_plugins
、edit_posts
……)或任何自定義字符串(my_awesome_plugin_cap
)。
它允許我們?yōu)槲覀兊牟寮]冊任意數(shù)量的自定義權(quán)限。
WP_Role::remove_cap()
如果存在,則從角色中刪除權(quán)限。
<code>add_action('init', function() { remove_role('plugins_manager'); });</code>
WP_User::add_role()
向給定用戶添加角色。
<code>add_action('init', function() { $role = get_role('contributor'); $role->add_cap('install_plugins'); });</code>
此函數(shù)允許您理論上為同一用戶設(shè)置多個角色。
由於WordPress後端僅顯示和管理每個用戶一個角色,因此我們不應(yīng)為用戶添加多個角色,並且應(yīng)始終在添加新角色之前使用WP_User::remove_role()
。
WP_User::remove_role()
從給定用戶中刪除角色。
<code>add_action('init', function() { $role = get_role('contributor'); $role->remove_cap('install_plugins'); });</code>
WP_User::add_cap()
向給定用戶添加權(quán)限。
<code>array( 'administrator' => array( 'name' => '管理員', 'capabilities' => array( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'edit_users' => true, // [...] ) ), 'contributor' => array( 'name' => '投稿者', 'capabilities' => array( 'delete_pages' => true, 'delete_others_pages' => true, 'delete_published_pages' => true, 'delete_posts' => true, // [...] ) ), // [...] );</code>
如果我們想向用戶添加單個權(quán)限,而不必創(chuàng)建完整的角色,這將非常有用。
WP_User::remove_cap()
從給定用戶中刪除權(quán)限。
<code>array( 'administrator' => true )</code>
WordPress API的一些問題
除了一個問題之外,我們看到的函數(shù)看起來都很好:數(shù)據(jù)庫訪問和性能。
我們在處理角色和權(quán)限時主要關(guān)注的是何時應(yīng)該觸發(fā)我們的代碼?
為了解釋這一點,讓我們看看WordPress核心代碼。
首先,我們要添加一個新的空角色:
<code>if (!current_user_can('activate_plugins')) { wp_die(__('您沒有足夠的權(quán)限來管理此站點的插件。')); }</code>
以下是add_role
函數(shù)(實際上重定向到WP_Roles::add_role
)的前幾行:
<code>add_action('init', function() { if (current_user_can('install_plugins')) { echo '您可以安裝插件'; } else { echo '您不能安裝插件'; } });</code>
如果我們添加一個新角色,add_role
函數(shù)運行一次,然後什麼也不做。
接下來,假設(shè)我們要向我們新創(chuàng)建的角色添加權(quán)限:
<code>add_action('init', function() { $user = get_user_by('slug', 'admin'); if ($user->has_cap('install_plugins')) { echo '管理員可以安裝插件'; } else { echo '管理員不能安裝插件'; } });</code>
WordPress 4.2.2中的WP_Role::add_cap()
函數(shù)如下所示:
<code>add_action('admin_init', function() { $roles = get_editable_roles(); var_dump($roles); });</code>
它更新了$this->roles
對象,但我們也可以看到數(shù)據(jù)庫將每次我們的代碼運行時都會更新,即使我們的新權(quán)限已經(jīng)註冊了!
這意味著如果我們關(guān)心性能,我們?yōu)樽远x角色和權(quán)限而編寫的全部代碼不應(yīng)在每個頁面加載時運行。
解決方法
有幾種方法可以避免這些數(shù)據(jù)庫問題。
使用插件激活
WordPress允許插件作者使用register_activation_hook()
函數(shù)在後端啟用插件時觸發(fā)代碼。
讓我們創(chuàng)建一個示例插件:
<code>add_action('init', function() { $role = get_role('administrator'); var_dump($role); }); // 這將打?。?// WP_Role 對象 // ( // [name] => administrator // [capabilities] => Array // ( // [switch_themes] => 1 // [edit_themes] => 1 // [activate_plugins] => 1 // [edit_plugins] => 1 // [...]</code>
此代碼僅會在網(wǎng)站上啟用插件時運行一次。
現(xiàn)在,我們必須記住,此解決方案取決於插件的激活和停用。
如果插件已經(jīng)投入生產(chǎn),或者在推送更新時省略了重新激活,會發(fā)生什麼情況?
事實上,此解決方案也依賴於數(shù)據(jù)庫,並且在推送代碼時需要一個額外的步驟。
繞過WordPress數(shù)據(jù)庫
還有一種未公開的解決方案,在某些情況下可以很好地工作。
讓我們最後看看WordPress核心代碼,當WP_Roles
對像在WordPress啟動時從數(shù)據(jù)庫加載角色時:
<code>add_action('init', function() { $role = get_role('administrator'); var_dump($role->has_cap('install_plugins')); // 打印 TRUE });</code>
在從數(shù)據(jù)庫獲取數(shù)據(jù)之前,WordPress會檢查$wp_user_roles
全局變量。
如果已設(shè)置,WordPress將使用其內(nèi)容,並通過將$this->use_db
變量設(shè)置為false來阻止數(shù)據(jù)庫使用。
讓我們嘗試一下,只保留一個新的、受限的管理員角色:
<code>add_action('init', function() { add_role('plugins_manager', '插件管理員', array( 'install_plugins', 'activate_plugins', 'edit_plugins' )); });</code>
加載後端時,我們可以看到它保留了我們自定義角色的定義:
此解決方案解決了數(shù)據(jù)庫問題,但可能會引入其他一些問題:
- 使用原生API的插件可能無法正常工作。
- 我們必須手動設(shè)置每個角色的定義,即使是我們不想更改的角色。
但是,在構(gòu)建需要自定義靜態(tài)角色列表的自定義WordPress應(yīng)用程序時,這可能是一種可行的解決方案:
- 角色定義可以與代碼一起版本化。
- 將新代碼推送到環(huán)境將自動更新定義。
- 不再需要考慮數(shù)據(jù)庫問題。
結(jié)論
在本文中,我介紹了WordPress中角色和權(quán)限使用的概述。
儘管其完整的API允許我們幾乎做任何我們想做的事情,但與數(shù)據(jù)庫的關(guān)係仍然是主要問題。
在開發(fā)我們的插件和主題時,我們必須牢記這一點。
您對WordPress管理角色的方式有何看法?期待您的反饋!
掌握WordPress角色和權(quán)限的常見問題解答
WordPress中的默認用戶角色是什麼?它們的權(quán)限是什麼?
WordPress有六個默認用戶角色:超級管理員、管理員、編輯、作者、投稿者和訂閱者。每個角色都有一組特定的權(quán)限。例如,超級管理員可以訪問多個站點的所有管理功能。管理員可以在單個站點上執(zhí)行所有管理任務(wù)。編輯可以發(fā)布和管理帖子,包括其他用戶的帖子。作者可以發(fā)布和管理他們自己的帖子。投稿者可以撰寫和管理他們自己的帖子,但不能發(fā)布它們。訂閱者只能管理他們的個人資料。
如何在WordPress中添加新的用戶角色?
要在WordPress中添加新的用戶角色,可以使用add_role()
函數(shù)。此函數(shù)接受三個參數(shù):角色、顯示名稱和權(quán)限數(shù)組。例如,要添加一個名為“custom_role”的新角色,並具有讀取和編輯帖子的權(quán)限,可以使用以下代碼:
add_role( 'custom_role', __('自定義角色'), array( 'read' => true, // 可以讀取帖子 'edit_posts' => true, // 可以編輯帖子 ) );
如何在WordPress中刪除用戶角色?
要在WordPress中刪除用戶角色,可以使用remove_role()
函數(shù)。此函數(shù)接受一個參數(shù):角色。例如,要刪除前面添加的“custom_role”,可以使用以下代碼:
remove_role('custom_role');
如何向WordPress中的用戶角色添加權(quán)限?
要向WordPress中的用戶角色添加權(quán)限,可以使用add_cap()
函數(shù)。此函數(shù)接受兩個參數(shù):權(quán)限和一個布爾值,指示角色是否具有該權(quán)限。例如,要向“custom_role”添加“publish_posts”權(quán)限,可以使用以下代碼:
$role = get_role('custom_role'); $role->add_cap('publish_posts', true);
如何從WordPress中的用戶角色中刪除權(quán)限?
要從WordPress中的用戶角色中刪除權(quán)限,可以使用remove_cap()
函數(shù)。此函數(shù)接受一個參數(shù):權(quán)限。例如,要從“custom_role”中刪除“publish_posts”權(quán)限,可以使用以下代碼:
$role = get_role('custom_role'); $role->remove_cap('publish_posts');
如何更改WordPress中的默認用戶角色?
要更改WordPress中的默認用戶角色,請在WordPress儀表板中導(dǎo)航到設(shè)置 > 常規(guī)。在“新用戶默認角色”下,從下拉菜單中選擇要設(shè)置為默認的角色。
如何向WordPress中的用戶分配多個角色?
WordPress默認不支持向用戶分配多個角色。但是,您可以使用像Multiple Roles這樣的插件來實現(xiàn)這一點。安裝並激活插件後,您可以從用戶的個人資料頁面向用戶分配多個角色。
如何根據(jù)WordPress中的用戶角色限制內(nèi)容訪問?
要根據(jù)WordPress中的用戶角色限制內(nèi)容訪問,可以使用像Members這樣的插件。此插件允許您控制哪些角色可以訪問您網(wǎng)站上的特定內(nèi)容。
如何在WordPress中創(chuàng)建自定義權(quán)限?
要在WordPress中創(chuàng)建自定義權(quán)限,可以使用add_cap()
函數(shù)。此函數(shù)接受兩個參數(shù):權(quán)限和一個布爾值,指示角色是否具有該權(quán)限。例如,要向“custom_role”添加名為“manage_custom”的自定義權(quán)限,可以使用以下代碼:
$role = get_role('custom_role'); $role->add_cap('manage_custom', true);
如何檢查WordPress中的用戶是否具有特定權(quán)限?
要檢查WordPress中的用戶是否具有特定權(quán)限,可以使用current_user_can()
函數(shù)。此函數(shù)接受一個參數(shù):權(quán)限。例如,要檢查當前用戶是否具有“manage_custom”權(quán)限,可以使用以下代碼:
if (current_user_can('manage_custom')) { // 當前用戶具有“manage_custom”權(quán)限 }
所有圖片均保留原始格式和位置。
以上是掌握WordPress角色和功能的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使用Git管理WordPress項目時,應(yīng)只將主題、自定義插件和配置文件納入版本控制;設(shè)置.gitignore文件以忽略上傳目錄、緩存和敏感配置;利用webhook或CI工具實現(xiàn)自動部署並註意數(shù)據(jù)庫處理;採用兩分支策略(main/develop)進行協(xié)作開發(fā)。這樣做可避免衝突、保障安全,並提升協(xié)作與部署效率。

創(chuàng)建Gutenberg塊的關(guān)鍵在於理解其基本結(jié)構(gòu)並正確連接前後端資源。 1.準備開發(fā)環(huán)境:安裝本地WordPress、Node.js和@wordpress/scripts;2.使用PHP註冊塊並用JavaScript定義塊的編輯和顯示邏輯;3.通過npm構(gòu)建JS文件以使更改生效;4.遇到問題時檢查路徑、圖標是否正確或使用實時監(jiān)聽構(gòu)建避免重複手動編譯。按照這些步驟,可以逐步實現(xiàn)一個簡單的Gutenberg塊。

使用WordPress測試環(huán)境是為了確保新功能、插件或主題在正式上線前的安全性和兼容性,避免影響真實網(wǎng)站。搭建測試環(huán)境的步驟包括:下載安裝本地服務(wù)器軟件(如LocalWP、XAMPP),創(chuàng)建站點、設(shè)置數(shù)據(jù)庫和管理員賬號,安裝主題和插件進行測試;複製正式網(wǎng)站到測試環(huán)境的方法是通過插件導(dǎo)出站點、導(dǎo)入測試環(huán)境並替換域名;使用時應(yīng)注意不使用真實用戶數(shù)據(jù)、定期清理無用數(shù)據(jù)、備份測試狀態(tài)、適時重置環(huán)境,並統(tǒng)一團隊配置以減少差異問題。

在WordPress中,當新增自定義文章類型或修改固定鏈接結(jié)構(gòu)後,需手動刷新重寫規(guī)則,此時可通過代碼調(diào)用flush_rewrite_rules()函數(shù)實現(xiàn)。 1.可在主題或插件激活鉤子中添加該函數(shù)以自動刷新;2.僅在必要時執(zhí)行一次,如添加CPT、分類法或修改鏈接結(jié)構(gòu)後;3.避免頻繁調(diào)用以免影響性能;4.多站點環(huán)境下需視情況為每個站點單獨刷新;5.某些託管環(huán)境可能限制規(guī)則保存。此外,訪問“設(shè)置>固定鏈接”頁麵點擊保存也可觸髮刷新,適合非自動化場景。

tosetupredirectsinwordpressingthe.htaccessfile,locateThEfileInyourSite'sRootDirectorectoryAndDrectRectrulesabovethe#beginWordPresssection.forbasic301redirects,USETHEETHEETERECTREFTATRECTATREDERTREFTATREDERTREFTATRECTRECTATRECTRECTATREDECT301/OLD-PAGEHTTPS:

UsingsMtpForWordPresseMailSimProvesDeliverabilitialComparedComparedTothEdeDefaultPhpMail()函數(shù).1.smtpauthenticateswithyouremailserver.2.somemomehostsdisablesablephpmail()

要實現(xiàn)響應(yīng)式WordPress主題設(shè)計,首先要使用HTML5和移動優(yōu)先的Meta標籤,在header.php中添加viewport設(shè)置以確保移動端正確顯示,並用HTML5結(jié)構(gòu)標籤組織佈局;其次,利用CSS媒體查詢實現(xiàn)不同屏幕寬度下的樣式適配,按移動優(yōu)先原則編寫樣式,常用斷點包括480px、768px和1024px;第三,彈性處理圖片和佈局,為圖片設(shè)置max-width:100%並使用Flexbox或Grid佈局替代固定寬度;最後,通過瀏覽器開發(fā)者工具和真實設(shè)備進行充分測試,優(yōu)化加載性能,確保響應(yīng)

TOINTEGRATETHIRD-PARTYAPISINTOWORDPRESS,關(guān)注臺詞:1.SelectAutableabepianDobtainCredentialslikeapikeYsoroAuthtoKensByEnterRegisteringThemSecure.2.ChooseBeteBetB????eteBetB????eteBetB????etebetInpliCityOorcustimplicityOrcustomPliCoseTompliCoseTomploomcoseusionfunctionfunctionfunctibunitiacuciencipuity forfunigation。
