WordPress使用者角色和許可權的終極指南

wordpress-user-roles

WordPress使用者角色許可權使您能夠控制其他使用者可以或不能在您的網站上執行的操作。您可以使用它們來管理使用者操作,例如撰寫和編輯文章、建立新頁面、稽覈評論、安裝外掛、新增新使用者等等。

瞭解使用者角色和許可權對於管理任何WordPress網站都是必不可少的。例如,如果您正在為客戶構建站點,您不希望他們編輯或更改已安裝的主題。同樣,讓多作者部落格的作者安裝或刪除外掛也是不明智的。

學習如何巧妙地管理WordPress使用者角色將幫助您簡化工作流程、確保網站安全並獲得對網站的最終控制權。

在這份詳盡的指南中,您將瞭解WordPress使用者角色、WordPress提供的各種許可權、如何編輯現有使用者角色、如何在多站點上管理使用者,以及使用一組全新許可權建立新角色。

什麼是WordPress使用者角色和許可權?

角色和許可權是WordPress中使用者訪問管理的基礎。要了解WordPress中的使用者角色,您首先需要知道什麼是許可權。

WordPress將使用者可以採取的任何操作定義為Capability。以下是WordPress中可用許可權的一些示例,以及它們在其程式碼中的引用方式:

大多數許可權從它們的名稱就可以不言自明。WordPress的核心內建了70多種硬編碼許可權。

角色是您可以分配給使用者的一系列許可權。每個WordPress使用者都需要分配一個角色。使用者只能執行其角色授予他們的操作。

“角色”是“許可權”的集合

“角色”是“許可權”的集合

在上圖中,角色 1的任何使用者都可以閱讀文章,但不能編輯文章。具有角色 2的使用者可以閱讀和編輯文章,但他們不能釋出文章。任何具有角色 3的使用者都可以閱讀、編輯和釋出文章,但他們不能刪除文章,這與可以刪除文章的角色 4使用者不同。

WordPress儀表盤中的“新增新使用者”面板

WordPress儀表盤中的“新增新使用者”面板

WordPress使用其許多本機許可權來定義其預設使用者角色。例如,它授予管理員和編輯者許可權publish_pages,但不會將它們分配給訂閱者和貢獻者。

WordPress儀表盤中的“使用者”面板

WordPress儀表盤中的“使用者”面板

至少,每個WordPress使用者都有一個使用者名稱、密碼、一個電子郵件地址和一個角色。

phpMyAdmin顯示WP資料庫儲存許可權的位置

phpMyAdmin顯示WP資料庫儲存許可權的位置

WordPress將其所有基於角色的許可權儲存在其資料庫wp_user_roles序列化選項下的wp_options表中。WP_Roles核心類用於定義如何在資料庫中儲存角色和許可權。

WordPress預設使用者角色和許可權

如果你使用 WordPress,你可能以前見過“使用者角色”這個術語。但究竟什麼是使用者角色,它又是如何工作的呢?

簡單地說,使用者角色是一組許可權,決定了使用者在網站上能做什麼和不能做什麼。每個角色都有一個顯示在 WordPress 管理面板中的名稱,並有自己的許可權,管理員可以啟用或禁用這些許可權。

WordPress 提供六種預定義的使用者角色: 超級管理員、管理員、編輯、作者、貢獻者和訂閱者。

每個角色都有一套許可權,如釋出文章管理評論管理主題外掛。有些角色對網站擁有廣泛的控制權,而有些角色則受到更多限制。

例如,超級管理員角色可以完全訪問所有許可權,尤其是在多站點網路中,而訂閱者則僅限於閱讀內容。

如果需要,網站所有者可以使用 add_cap()remove_cap() 等函式新增或刪除許可權,從而進一步自定義角色。此外,開發人員還可以使用 add_role()remove_role() 引入新角色或移除現有角色,從而使 WordPress 使用者管理高度靈活。

WP_Roles類

WordPress使用User Roles API實現角色和許可權,其中大部分基於WP_Roles核心類。wp-includes/class-wp-roles.php您可以在檔案中找到它的來源。

如果您檢視資料庫,您會發現角色位於一個已定義角色名稱的陣列中。rolename鍵將使用者角色名稱儲存為name鍵的值,並將所有許可權儲存在單獨的陣列中作為capability鍵的值。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
array (
'rolename' => array (
'name' => 'rolename',
'capabilities' => array()
)
)
array ( 'rolename' => array ( 'name' => 'rolename', 'capabilities' => array() ) )
array (
'rolename' => array (
'name' => 'rolename',
'capabilities' => array()
)
)

WP_Roles類定義了很多方法。您可以在程式碼中的任何位置呼叫它們以與使用者角色API進行互動。

注意: WordPress包含另一個名為WP_Role的核心類(注意單數“Role”)。它用於擴充套件使用者角色API。

當你反序列化的wp_user_roles鍵值時,它看起來像這樣:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
array (
'administrator' =>
array (
'name' => 'Administrator',
'capabilities' =>
array (
'switch_themes' => true,
'edit_themes' => true,
'activate_plugins' => true,
// [...rest of the lines cut off for brevity...]
),
),
'editor' =>
array (
'name' => 'Editor',
'capabilities' =>
array (
'moderate_comments' => true,
'manage_categories' => true,
'manage_links' => true,
// [...rest of the lines cut off for brevity...]
),
),
'author' =>
array (
'name' => 'Author',
'capabilities' =>
array (
'upload_files' => true,
'edit_posts' => true,
'edit_published_posts' => true,
// [...rest of the lines cut off for brevity...]
),
),
'contributor' =>
array (
'name' => 'Contributor',
'capabilities' =>
array (
'edit_posts' => true,
'read' => true,
// [...rest of the lines cut off for brevity...]
),
),
'subscriber' =>
array (
'name' => 'Subscriber',
'capabilities' =>
array (
'read' => true,
'level_0' => true,
),
),
)
array ( 'administrator' => array ( 'name' => 'Administrator', 'capabilities' => array ( 'switch_themes' => true, 'edit_themes' => true, 'activate_plugins' => true, // [...rest of the lines cut off for brevity...] ), ), 'editor' => array ( 'name' => 'Editor', 'capabilities' => array ( 'moderate_comments' => true, 'manage_categories' => true, 'manage_links' => true, // [...rest of the lines cut off for brevity...] ), ), 'author' => array ( 'name' => 'Author', 'capabilities' => array ( 'upload_files' => true, 'edit_posts' => true, 'edit_published_posts' => true, // [...rest of the lines cut off for brevity...] ), ), 'contributor' => array ( 'name' => 'Contributor', 'capabilities' => array ( 'edit_posts' => true, 'read' => true, // [...rest of the lines cut off for brevity...] ), ), 'subscriber' => array ( 'name' => 'Subscriber', 'capabilities' => array ( 'read' => true, 'level_0' => true, ), ), )
array (
'administrator' => 
array (
'name' => 'Administrator',
'capabilities' => 
array (
'switch_themes' => true,
'edit_themes' => true,
'activate_plugins' => true,
// [...rest of the lines cut off for brevity...]
),
),
'editor' => 
array (
'name' => 'Editor',
'capabilities' => 
array (
'moderate_comments' => true,
'manage_categories' => true,
'manage_links' => true,
// [...rest of the lines cut off for brevity...]
),
),
'author' => 
array (
'name' => 'Author',
'capabilities' => 
array (
'upload_files' => true,
'edit_posts' => true,
'edit_published_posts' => true,
// [...rest of the lines cut off for brevity...]
),
),
'contributor' => 
array (
'name' => 'Contributor',
'capabilities' => 
array (
'edit_posts' => true,
'read' => true,
// [...rest of the lines cut off for brevity...]
),
),
'subscriber' => 
array (
'name' => 'Subscriber',
'capabilities' => 
array (
'read' => true,
'level_0' => true,
),
),
)

它是一個多維陣列,每個角色都分配了一個角色名稱並授予了一組許可權。同樣,WordPress將基於使用者的許可權儲存在帶有wp_capabilities元鍵名稱的wp_usermeta表中。

注意:您的設定中的wp_字首可能不同。這取決於站點檔案wp-config.php$table_prefix全域性變數的值。

角色與許可權圖表

WordPress Codex中的“角色與許可權”圖表

WordPress Codex中的“角色與許可權”圖表

WordPress Codex包含一個簡單的Capability vs Role Table,儘管它不是那麼直觀。它總結了預設使用者角色在單站點和多站點WordPress設定中可以執行的所有操作。在一定數量的許可權之後會有一箇中斷,以便您輕鬆區分高階和低階許可權。

為了更好地一目瞭然地展示所有WordPress角色和許可權,您可以檢視Exygy提供的這張表格

WordPress的Gutenberg區塊編輯器引入了一個名為Reusable Blocks的驚人功能。它允許您將整個區塊(或多個區塊)儲存為模板,並在您網站的其他任何地方使用它。

在WordPress的新Gutenberg區塊編輯器中新增“可重用區塊”

在WordPress的新Gutenberg區塊編輯器中新增“可重用區塊”

因此,WordPress還引入了以下與可重用區塊相關的新許可權:

  • 建立可重用的區塊
  • 編輯可重用區塊
  • 讀取可重用區塊
  • 刪除可重用的區塊

上面列出的許可權與文章相關的許可權類似。管理員或編輯者可以訪問所有與可重用區塊相關的許可權,而作者只能編輯或刪除由他們建立的可重用區塊。貢獻者只能讀取可重用的區塊。

特殊許可權:未經過濾的上傳

未經過濾的上傳是一項特殊許可權,預設情況下不分配給任何使用者角色,包括管理員或超級管理員。它允許使用者上傳具有任何副檔名(例如 SVG 或 PSD)的檔案,而不僅僅是那些被WordPress列入白名單的檔案。

注意:您可以使用wp_get_mime_types() 函式獲取WordPress支援的mime型別和副檔名列表。

要啟用此許可權,您需要將以下程式碼片段新增到您的wp-config.php檔案中。在要求您停止編輯的行之前定義常量。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'ALLOW_UNFILTERED_UPLOADS', true );
define( 'ALLOW_UNFILTERED_UPLOADS', true );
define( 'ALLOW_UNFILTERED_UPLOADS', true );

定義此常量後,您可以為WordPress單站點上的任何使用者角色安裝未過濾上傳許可權。但是,在多站點安裝中,只有超級管理員才能擁有此許可權。

例如,如果您想將unfiltered_upload許可權分配給編輯器,您可以在WordPress程式碼中的任何位置新增以下程式碼(理想情況下,僅在主題或外掛啟用時執行它):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$role = get_role( 'editor' );
$role->add_cap( 'unfiltered_upload' );
?>
<?php $role = get_role( 'editor' ); $role->add_cap( 'unfiltered_upload' ); ?>
<?php
$role = get_role( 'editor' );
$role->add_cap( 'unfiltered_upload' );
?>

我們將在本文後面討論如何新增或自定義所有使用者角色或特定使用者的許可權。

原始許可權與元許可權

WordPress中主要有兩種型別的許可權:

  • 原始許可權:這些許可權被授予特定角色。具有這些角色的使用者會自動繼承原始許可權。
  • 元許可權:這些許可權預設不授予任何角色。WordPress在其程式碼和資料庫中檢查某個物件,例如文章、頁面、使用者或任何分類法,如果邏輯檢查成功,它會將元許可權“對映”到一個或多個原始許可權。

例如,WordPress授予作者自己文章的edit_posts許可權,以便他們能夠編輯它們。但是,此許可權不允許他們編輯其他使用者的文章。這就是元許可權提供幫助的地方。

WordPress使用map_meta_cap()函式返回繫結到特定物件的原始許可權陣列。然後它將它們與使用者物件進行比較,以檢查使用者是否可以編輯文章。

其他一些元許可權示例是read_postdelete_postremove_userread_post。我們將在下面的自定義許可權部分中更深入地瞭解它們。

預設的WordPress使用者角色

WordPress包括六個預定義的使用者角色。WordPress安裝的第一個使用者預設獲得管理員角色(或WordPress多站點安裝的超級管理員角色)。

由於WordPress在發展成為成熟的CMS之前最初是一個部落格平臺,因此它定義了大部分使用者角色以在網路上釋出內容。它的其他預定義使用者角色是EditorAuthorContributorSubscriber

預設的WordPress使用者角色按功能順序堆疊

預設的WordPress使用者角色按許可權順序堆疊

將預設的WordPress使用者角色想象為代表各種許可權的堆疊圓柱體的集合。最大的圓柱體的許可權最多,第二大的圓柱體的許可權次之,最小的圓柱體的許可權最少。

使用者角色 描述 訪問許可權級別
1 超級管理員(Super Admin) 擁有訪問整個網站的許可權,包括網路管理功能。 最高階別訪問許可權。可以執行網站上的任何操作。
2 管理員(Administrator) 擁有所有管理許可權,包括新增和管理使用者、安裝和啟用外掛和主題以及修改網站設定。 高階別訪問許可權。可以管理使用者、外掛、主題和網站設定。
3 編輯(Editor) 可以建立、編輯和釋出自己的帖子,也可以管理其他使用者的帖子。 可以管理所有使用者的文章。可以釋出和編輯自己和他人的文章。
4 作者(Author) 可以建立、編輯和釋出自己的文章,但不能釋出其他使用者的文章。 可以釋出和編輯自己的文章,但不能釋出和編輯其他使用者的文章。
5 貢獻者(Contributor) 可以建立和編輯自己的文章,但不能發表。但貢獻者可以提交文章供編輯或管理員稽覈。 可以建立和編輯文章,但不能發表文章。可提交文章供稽覈。
6 訂閱者(Subscriber) 擁有最有限的訪問許可權,只能管理自己的資料和對文章發表評論。 最低階別的訪問許可權。可以管理自己的個人資料並對文章發表評論。

你不應該認為一個角色優於另一個角色。相反,將角色視為在站點內設定使用者的職責。

使用者角色永遠不會優越,也不會低劣,它準確地定義了它的意圖。

現在讓我們詳細瞭解所有預定義的WordPress使用者角色。

Administrator(管理員)

WordPress中的“Administrator”角色儀表盤

WordPress中的“Administrator”角色儀表盤

WordPress為任何單站點安裝的第一個使用者分配管理員角色。它位於所有其他使用者角色的頂部,可以訪問WordPress定義的所有許可權。具有管理員角色的使用者可以執行以下操作:

  • 建立和刪除使用者。
  • 重置密碼
  • 安裝和管理外掛和主題
  • 編輯外掛、主題、檔案和程式碼

只有管​​理員可以在WordPress中新增新使用者

只有管​​理員可以在WordPress中新增新使用者

由於管理員是最強大的角色,因此您應該只將其分配給您信任的人。理想情況下,每個站點應該只有一名管理員。

WordPress多站點網路中的管理員角色的定義略有不同,但名稱相同。在多站點網路中,管理員角色不享有在WP單站點中具有的某些許可權,例如安裝主題和外掛。WordPress為超級管理員角色保留了這些許可權。

Editor(編輯)

WordPress中的“編輯”角色儀表盤

WordPress中的“編輯”角色儀表盤

編輯器負責管理WordPress網站上的內容。他們可以建立、修改、釋出或刪除文章和頁面,甚至是其他使用者建立的文章和頁面。他們的一些許可權包括:

  • 刪除已釋出的文章和頁面
  • 適度的評論
  • 管理連結和類別
  • 編輯其他使用者的文章和頁面

編輯者不能採取站點管理操作,例如安裝外掛和主題。他們的主要職責是監督其他作者和貢獻者的工作,或者是一個人的內容團隊。

提示:如果您自己管理WordPress網站,您可以為自己建立一個具有編輯角色的備用使用者。這樣,您就可以將您的管理和釋出職責分開。即使您的編輯帳戶遭到入侵,您的管理員帳戶也不會受到黑客攻擊。

Author(作者)

WordPress中的“作者”角色儀表盤

WordPress中的“作者”角色儀表盤

顧名思義,任何具有Author角色的使用者都可以建立、編輯和釋出文章。他們還可以上傳媒體檔案和刪除自己的文章,但不能建立頁面或編輯其他任何人的文章。

作者可以為他們的文章新增標籤並將他們的文章分配給現有的類別,但他們不能建立新的類別。與編輯一樣,他們無權訪問任何管理職責,例如設定、外掛和主題。

注意:作者即使在釋出後也可以刪除他們的文章。如果您要為任何人分配作者的角色,請確保您可以完全控制他們的文章,包括刪除它們。

Contributor(貢獻者)

WordPress中的“貢獻者”角色儀表盤

WordPress中的“貢獻者”角色儀表盤

貢獻者角色是作者角色的精簡版。具有貢獻者角色的使用者可以建立自己的文章、刪除文章的草稿,但不能釋出文章。

他們可以儲存文章的草稿或將其傳送給編輯或管理員進行審查和釋出。一旦他們釋出了文章,貢獻者就無法刪除他們的文章。相反,作者可以刪除他們釋出的文章。

貢獻者角色非常適合新作者和來賓貢獻者。

Subscriber(訂閱者)

WordPress中的“訂閱者”角色儀表盤

WordPress中的“訂閱者”角色儀表盤

訂閱者角色位於許可權排名的最低階別。具有訂閱者角色的使用者可以管理他們的個人資料並有權閱讀網站上的所有文章。差不多就是這樣!

您可以將內容限制為僅登入使用者,包括訂閱者

您可以將內容限制為僅登入使用者,包括訂閱者

通常,每個人都有權閱讀WordPress網站上的內容。但是,在訂閱或會員網站中,只有登入使用者才能檢視內容。具有訂閱者角色的使用者可以閱讀這些例項中的文章。

Super Admin(超級管理員)

WordPress多站點網路中的“超級管理員”角色儀表盤

WordPress多站點網路中的“超級管理員”角色儀表盤

超級管理員角色僅在WordPress多站點安裝中可用。此角色取代多站點網路中的單站點管理員,並授予對所有高階管理許可權的訪問許可權。

一些可供超級管理員使用的僅限多站點的許可權包括:

  • 建立、管理和刪除網路站點
  • 管理網路使用者、外掛、主題和選項
  • 升級多站點網路上的所有站點
  • 設定多站點網路
  • 將管理員分配給網路的各個站點

WordPress多站點網路中的“站點”面板

WordPress多站點網路中的“站點”面板

超級管理員儀表盤中的“主題”面板

超級管理員儀表盤中的“主題”面板

在多站點網路中,只有超級管理員可以安裝主題並在整個網路中啟用它們。個別網站的管理員只能檢視和啟用已由超級管理員安裝的主題。

例如,我在我的網路上安裝了免費的Astra主題,但我沒有為網路啟用它。因此,網路中各個子站點的管理員無法在他們的主題面板下看到它。

網路子站點管理員無法安裝新主題

網路子站點管理員無法安裝新主題

在上面的螢幕截圖中,您還可以注意到網路中的站點管理員無法訪問“外掛”選單與主題不同,超級管理員可以更改網路設定以使管理員能夠在其站點上安裝和啟用外掛。

超級管理員可以賦予管理員管理外掛的能力

超級管理員可以賦予管理員管理外掛的許可權

超級管理員還可以“網路啟用”外掛

超級管理員還可以“網路啟用”外掛

超級管理員還可以網路啟用外掛,以確保它們被強制用於網路上的所有站點。站點管理員無法停用網路啟用外掛。此設定非常適合在整個網路中強制執行基本外掛。

網路管理員螢幕

網路管理員儀表板充當超級管理員管理WordPress Multisite網路功能的中心樞紐。只有在建立網路後具有超級管理員角色的使用者才能訪問它。

網路管理員儀表盤包括管理網路的獨特選項

網路管理員儀表盤包括管理網路的獨特選項

1. 儀表板

Network Admin Dashboard是有關您的網路站點的詳細資訊的中心樞紐。它使您可以訪問所有網路設定。

2. 網站

網路管理儀表盤中的“站點”面板

網路管理儀表盤中的“站點”面板

您可以使用站點面板來管理屬於多站點網路的各個站點。此處列出的站點將是子目錄或子域,具體取決於您配置WordPress多站點網路的方式。

從這裡,您可以向網路新增新站點或從網路中刪除現有站點。

您還可以從此處訪問有關站點、使用者、主題和整體網路設定的資訊。您建立的第一個站點是網路中的主站點。網路從第一個站點的選項繼承其所有設定。

將新站點新增到WordPress多站點網路

將新站點新增到WordPress多站點網路

單擊新增新站點連結或按鈕將帶您到上面的螢幕,您可以在其中將新站點新增到您的多站點網路。如果您不打算讓其他人成為新站點的管理員,您也可以將自己指定為管理員。

3. 使用者

網路管理儀表盤中的“使用者”面板

網路管理儀表盤中的“使用者”面板

網路管理儀表板中的使用者螢幕允許您管理使用者並將新使用者新增到您的多站點網路。只有超級管理員可以將使用者新增到網路,但超級管理員可以修改網路設定以使站點管理員能夠將新使用者新增到他們自己的站點。

4. 主題

網路管理儀表盤中的“主題”面板

網路管理儀表盤中的“主題”面板

主題螢幕可讓您管理站點管理員可訪問的主題。它不允許您啟用或停用任何網站正在使用的主題,而只能設定任何網站可以使用的主題。

如果您禁用網路上任何地方都在使用的主題,即使您禁用它,它也會在該站點上保持活動狀態。但如果站點使用另一個主題,則禁用的主題不會出現在網路站點的主題面板中。

5. 外掛

網路管理儀表盤中的“外掛”面板

網路管理儀表盤中的“外掛”面板

外掛螢幕允許使用者新增或刪除網路中的外掛。新增後,您可以從站點的儀表板啟用外掛。您還可以從此處網路啟用外掛,以強制在網路中的所有站點上使用外掛。

預設情況下,站點管理員無法訪問其儀表板中的外掛選單。超級管理員可以通過修改網路設定為他們啟用此許可權。

為所有子站點管理員啟用外掛管理

為所有子站點管理員啟用外掛管理

注意:並非所有WordPress外掛都支援多站點網路。您需要閱讀外掛的文件以確認它們是否適用於多站點設定。

6.設定

網路管理儀表盤中的“網路設定”面板

網路管理儀表盤中的“網路設定”面板

您可以在網路設定螢幕上設定和更改整個網路的設定。網路的預設設定基於您在設定網路時建立的第一個站點。您可以在此處更改的一些網路設定是:

  • 操作設定
  • 註冊設定
  • 新站點設定
  • 上傳設定
  • 語言設定
  • 選單設定

在這裡,您還可以訪問建立網路時使用的網路設定資訊。您可以參考WordPress Codex中的網路管理員設定螢幕,詳細瞭解所有可用設定選項。

7. 更新

網路管理儀表盤中的“更新”面板

網路管理儀表盤中的“更新”面板

您可以從更新螢幕控制網路和單個站點的更新過程。更新面板將顯示可用於WordPress核心、主題和外掛的任何更新。安裝最新版本的WordPress後,您可以通過升級網路螢幕將其應用到網路上的所有站點。

網路管理儀表盤中的“升級網路”面板

網路管理儀表盤中的“升級網路”面板

注意:在WordPress單站點安裝中,管理員本質上是超級管理員,因為他們可以訪問所有管理員許可權。

您可以自定義使用者角色,也可以使用WordPress的預定義許可權建立自己的自定義角色。

外掛建立的其他使用者角色

雖然 WordPress 自帶預設使用者角色,但許多外掛會引入自己的角色來幫助管理特定功能。

下面是幾個例子:

WooCommerce(用於新增電子商務功能)

  • 客戶(Customer– 自動分配給在商店中建立賬戶的使用者。客戶可以更新賬戶詳情、跟蹤訂單和管理賬單資訊,但沒有後臺訪問許可權。
  • 商店經理(Shop Manager)– 專為需要管理產品、訂單和報告的商店管理員設計,他們沒有完全的管理員許可權。商店管理員可以編輯 WooCommerce 設定,但不能修改核心網站配置。

MemberPress(用於管理會員制網站)

  • 會員(Member)– 分配給購買會員資格的使用者。他們的訪問許可權取決於他們選擇的計劃,控制他們可以檢視的內容。
  • 會員管理經理(Membership Manager)– 允許使用者建立和管理會員等級、處理訂閱和監督交易的角色,但不影響網站的核心設定。

Tutor LMS(用於線上課程管理)

  • 講師(Instructor– 允許使用者建立、編輯和管理自己的課程、課程和測驗,同時保持管理控制的獨立性。
  • 學生(Student)– 分配給註冊課程的使用者,允許他們訪問課程、提交作業和跟蹤進度。

Rank Math SEO(搜尋引擎優化)

  • SEO編輯(SEO Editor)– 授予使用者通過管理搜尋引擎優化後設資料、重點關鍵字和模式標記來優化內容的許可權,同時限制全域性搜尋引擎優化設定。
  • SEO經理(SEO Manager)– 比搜尋引擎優化編輯器更高一層,該角色允許完全控制所有搜尋引擎優化設定,包括網站地圖、重定向和分析整合。

AffiliateWP(用於管理聯屬會員計劃)

  • Affiliate會員(Affiliate) – 分配給註冊為聯屬會員的使用者,讓他們可以訪問專門的儀表板,跟蹤他們的推薦、佣金和支付情況。
  • Affiliate經理(Affiliate Manager)– 允許使用者批准或拒絕聯屬會員、調整佣金結構並監控聯屬會員績效報告。

注意:如果您正在使用上述任何外掛,請務必仔細分配角色。

使用者角色和許可權的優勢

角色和許可權系統是使用者管理WordPress的支柱。以下是它的許多好處:

  • 使用者角色可幫助您更有效地管理站點上的所有使用者。即使您的站點上有數十個使用者來自世界不同的地方,您也可以通過為每個人授予正確的角色來輕鬆地監督他們。
  • 通過限制使用者使用特定許可權,它可以幫助您使您的網站更加安全。例如,作者不能刪除他人的文章,編輯不能更改主題或安裝外掛,訂閱者只能訪問自己的個人資料。
  • WordPress外掛可以檢查使用者是否具有某些許可權,並在此基礎上執行某些操作。WordPress current_user_can() 函式有助於執行此檢查。例如,安全外掛只能向管理員顯示其選項面板,但仍向所有使用者顯示安全警告。
  • 您可以編輯使用者角色以將您的某些角色職責委派給其他使用者,從而騰出時間。假設您的網站吸引了很多評論。在這種情況下,您可以允許受信任的作者進行稽覈。作為管理員,您仍將保留最終權力,但您可以根據需要分擔一些責任。
  • 您可以使用許可權檢查來顯示只有特定使用者角色才能檢視的私人文章和頁面。這構成了會員網站的基礎。
  • 您可以根據使用者角色顯示或隱藏站點上的前端元素(例如選單項、小工具)。
  • 您可以建立具有自定義許可權的自定義文章型別,併為每個使用者角色授予或拒絕這些許可權。同樣,您還可以定義自定義許可權以僅允許某些角色訪問您的外掛或主題設定。

如何有效管理WordPress使用者角色

瞭解所有使用者角色和許可權至關重要,但您還需要了解如何在您的站點上有效地管理它們。雖然沒有兩個WordPress網站完全相同,但您可以遵循一些基本規則來充分利用WordPress的使用者角色和許可權。

為每個使用者提供最少的訪問許可權

僅為您網站上的每個使用者分配他們需要的訪問級別。授予更少的許可權總是比授予太多許可權要好。保護WordPress使用者角色對於確保您的網站及其內容安全至關重要。

為每個使用者仔細分配使用者角色

為每個使用者仔細分配使用者角色

限制管理員和編輯的數量

作為一般規則,每個站點都應該只有一個管理員,並且它應該只對站點進行核心更改。WordPress建議您遵守“最少許可權原則”,即您應該只授予使用者執行其所需工作所必需的許可權。

例如,最好使用編輯級別的使用者來管理網站上的內容,而不是使用管理員。如果您的網站上有多個編輯器,請確保您可以信任他們的廣泛功能。

將作者角色分配給您可以信任的內容建立者,因為他們可以釋出和刪除自己的文章。貢獻者角色更適合新的內容建立者和來賓文章。

根據需要自定義使用者角色

預設的WordPress使用者角色很有用,但它們可能並不適合每個用例。例如,讓您的作者能夠稽覈評論。

值得慶幸的是,WordPress使我們能夠根據我們的獨特需求自定義使用者角色或建立新角色。您可以通過程式碼或藉助WordPress使用者角色外掛手動執行此操作。我們將在本文中介紹這兩種方法。

在WordPress多站點網路上管理使用者

WordPress Multisite包含用於使用者管理的獨特設定。其中一些很容易掌握,而另一些則不然。

讓我們深入探討它們。

多站點網路註冊設定

開箱即用,只有超級管理員可以在網路上建立新使用者和站點。但是,它們可以允許使用者將網路上的帳戶註冊為子站點的訂閱者。

要啟用此功能,請轉到網路管理員 > 網路設定 > 註冊設定 > 允許新註冊,然後啟用“使用者帳戶可能已註冊”選項。

允許使用者在您的網路上註冊帳戶

允許使用者在您的網路上註冊帳戶

在這裡,您還可以允許登入使用者在您的網路上建立新站點。如果您想限制僅為您設定的使用者建立站點的許可權,您可以勾選此選項。

最後一個選項允許使用者註冊一個帳戶以及在您的網路上建立一個站點。在您的網路上建立站點的使用者被賦予其子站點的管理員角色。

一個使用者帳戶訪問整個網路

當您在網路上建立使用者帳戶時,或者當使用者在您網路的任何站點上註冊帳戶時,他們可以在登入後導航到網路內的任何站點。想象一下這是一個像Facebook或Reddit這樣的社交網路,您可以在其中建立一個帳戶並使用相同的使用者配置檔案訪問所有組或子版塊。

這是使用WordPress Multisite的主要好處之一。它允許您的使用者只需註冊一個帳戶即可訪問您的所有網站。

向站點管理員授予額外許可權

您可以通過勾選新增新使用者選項允許站點管理員將使用者新增到他們自己的站點。

允許站點管理員向其子站點新增新使用者

允許站點管理員向其子站點新增新使用者

如前所述,您可以授予站點管理員訪問管理其子站點上的外掛的許可權,方法是轉到網路設定 > 選單設定並選中啟用管理選單 > 外掛選項。

子站點級使用者註冊

預設情況下,WordPress多站點安裝僅允許使用者註冊整個網路。沒有選項可以只為一個子站點啟用使用者註冊。您可以使用Network Subsite User Registration外掛更改此行為。

“Network Subsite User Registration”外掛

“Network Subsite User Registration”外掛

此外掛允許站點管理員啟用本地使用者註冊,並且僅限訪問其站點。預設情況下,新使用者將擔任訂閱者角色,但您可以通過修改外掛設定來更改此設定。

允許任何人僅在您的子網站上註冊帳戶

允許任何人僅在您的子網站上註冊帳戶

將同一使用者分配給多個子站點

您可以將同一使用者分配給網路中具有唯一角色的多個站點。當使用者登入到其站點的儀表板時,他們可以通過“我的站點”螢幕訪問其所有站點的儀表板。

您可以將一個使用者分配到WordPress多站點網路中的多個站點

您可以將一個使用者分配到WordPress多站點網路中的多個站點

授予其他使用者超級管理員許可權

超級管理員還可以與其他使用者共享他們的許可權。您應謹慎啟用此選項,並僅將其分配給您可以信任的使用者。

授予其他使用者網路的超級管理員許可權

授予其他使用者網路的超級管理員許可權

瞭解WordPress Multisite中的所有使用者管理設定將幫助您更好地管理網路。要為WordPress Multisite找到其他有用的外掛,您可以在WordPress外掛庫搜尋安裝。

如何分配/更改WordPress使用者角色?

既然我們已經對 WordPress 的所有預設角色和外掛引入的附加角色有了基本瞭解,下面就來看看如何在 WordPress 中為使用者分配/更改角色:

分配新使用者角色:

  • 登入WordPress 管理面板
  • 導航至使用者新增新使用者
  • 在必填欄位中輸入使用者的詳細資訊。
  • (可選)為使用者設定密碼,或讓他們稍後再建立密碼。
  • 從下拉選單中選擇合適的角色。

分配新使用者角色

  • 單擊“新增使用者”完成該過程。

新增使用者

更改現有使用者角色:

  • 導航至使用者所有使用者
  • 在此可以看到網站上的所有使用者及其角色。

所有使用者

  • 將滑鼠懸停在要更改角色的使用者配置檔案上,然後單擊“編輯”。

編輯使用者

  • 在“顯示名稱”部分,找到“角色”選項。

使用者角色選項

  • 從下拉選單中選擇新角色。

使用者角色下拉選單

  • 單擊更新使用者儲存更改。

更新使用者

如何建立、編輯或刪除WordPress自定義角色

在本節中,我們將探討在 WordPress 中建立編輯刪除使用者角色的兩種簡單方法:使用 WordPress 外掛或手動方法。這些方法將幫助您輕鬆管理 WordPress 網站上的使用者訪問和許可權。

方法 #1. 使用外掛

如果管理 WordPress 使用者許可權變得難以應付,使用外掛可以簡化這一過程。有幾款外掛可以新增、修改和刪除 WordPress 使用者角色。

本節將介紹的 WordPress User Role Editor 外掛就是一個很受歡迎的選擇。這個使用者友好型外掛提供了許多有效管理 WordPress 使用者角色的許可權。

讓我們從如何使用該外掛修改使用者角色的許可權開始。

如何使用外掛編輯現有的WordPress使用者角色?

  • 從 WordPress 外掛庫中安裝並啟用 User Role Editor 外掛。

User Role Editor 外掛

  • 啟用後,在左側窗格中導航至使用者User Role Editor

User Role Editor 外掛

  • 您將看到網站上的 WordPress 角色列表。從下拉選單中選擇要修改的角色。

WordPress 角色列表

  • 外掛會顯示分配給該角色的現有許可權。例如,如果您選擇 WordPress 編輯角色,並按“Granted Only”進行篩選,您將看到當前分配給編輯器的所有許可權列表。

角色的現有許可權

  • 如果你看上面的截圖,顯示的許可權並沒有什麼意義。如果你不熟悉WordPress 的訪問級別和許可權,請閱讀 WordPress Codex 指南來詳細瞭解它們。
  • 或者……你可以點選 “Show capabilities in human readable form”選項,外掛就會以人類可讀的格式顯示這些許可權。

以人類可讀的格式顯示

  • 要為角色新增許可權,請進入左側窗格中的相應組,例如外掛。在本例中,我將更新訂閱者使用者角色的許可權。
  • 選中要新增的許可權,如安裝外掛啟用外掛,然後單擊“更新”按鈕更新使用者。

安裝外掛和啟用外掛許可權

  • 現在,“Granted Only部分將顯示分配給該角色的更新許可權。

顯示分配給該角色的更新許可權

  • 要刪除許可權,請取消選中相應組中的覈取方塊。

刪除許可權

這就是如何使用外掛輕鬆更新分配給使用者角色的許可權。

如何使用外掛建立新的WordPress使用者角色?

除了管理員、作者、編輯器等角色外,Role Editor 外掛還允許您建立新的 WordPress 角色。請按照以下步驟操作:

  • 點選右側選單上的“Add Role”按鈕。

建立新的WordPress使用者角色

  • 彈出視窗會詢問 Role Name(ID)、Display Role Name 和要複製的角色。

角色資訊

    • Role Name (ID):每個使用者角色的唯一 ID。
    • Display Role Name:將顯示的角色名稱。
    • Make Copy of:選擇作為新角色基礎的當前角色。
  • 輸入每個使用者角色的唯一 ID和要顯示的角色名稱。
  • 選擇將作為新角色基礎的當前角色

作為新角色基礎的當前角色

grey

  • 在我的例子中,複製了編輯角色後,我將新角色命名為“Cloudways Webmaster”。如您所見,新角色繼承了原編輯角色的所有許可權。

許可權繼承grey

  • 要新增/刪除新角色的許可權,就像我們之前所做的那樣修改它。

如何使用外掛刪除現有WordPress使用者角色?

  • 要刪除現有角色,請點選“Delete Role”選項。

刪除現有角色

  • 在本例中,我將刪除我們之前建立的新角色。
  • 從下拉選單中選擇要刪除的角色,然後點選“Delete Role”。

確定刪除角色

  • 確認要刪除角色後,就大功告成了。

刪除角色最終確認

到目前為止,我們已經介紹瞭如何通過新增或刪除許可權、建立新角色甚至刪除角色來修改現有的使用者角色。接下來,我將教你如何使用程式碼建立自定義 WordPress 使用者角色。

方法 #2. 程式碼片段

手動管理 WordPress 使用者角色可以讓你完全控制許可權,允許你根據網站需要建立自定義角色、修改現有角色或刪除預設角色。下面,我將一步步指導您完成這一過程。

內容管理系統提供了五個用於管理 WordPress 角色和許可權的函式:

  • add_role():用於新增自定義角色。
  • remove_role():用於刪除自定義角色。
  • add_cap():用於為角色新增自定義許可權。
  • remove_cap():用於從角色中移除自定義許可權。
  • get_role ():獲取角色及其許可權的相關資訊。

如何刪除預設使用者角色(手動)

如果您想刪除 WordPress 的某些預設角色,可以使用 remove_role() 函式來實現。預設情況下,WordPress 包含六個角色:

  • 超級管理員
  • 管理員
  • 編輯
  • 作者
  • 撰稿人
  • 訂閱者

在本教學中,我將刪除除管理員以外的所有使用者角色。

  • 進入WordPress 管理器外觀主題檔案編輯器

主題檔案編輯器

  • 開啟活動主題的 functions.php 檔案。示例主題是 Astra 。

活動主題的 functions.php 檔案

  • 在檔案末尾新增以下程式碼片段:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    remove_role( 'subscriber' );
    remove_role( 'editor' );
    remove_role( 'contributor' );
    remove_role( 'author' );
    remove_role( 'subscriber' ); remove_role( 'editor' ); remove_role( 'contributor' ); remove_role( 'author' );
    remove_role( 'subscriber' );
    remove_role( 'editor' );
    remove_role( 'contributor' );
    remove_role( 'author' );

更新 functions.php 檔案

  • 如果在 WordPress 儀表板上找不到主題檔案編輯器,可以使用 SFTP 訪問 functions.php 檔案。

使用 SFTP 訪問 functions.php 檔案

  • 要驗證所有提及的 WordPress 使用者角色都已刪除,請導航至使用者所有使用者
  • 您應該看到,除管理員外,所有預設 WordPress 角色都已刪除。

刪除除管理員外預設角色

如何新增新的WordPress使用者角色 (手動)

現在,讓我們使用 add_role() 函式建立一個具有特定許可權的新使用者角色。函式的結構如下

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
add_role( $role, $display_name, $capabilities );
add_role( $role, $display_name, $capabilities );
add_role( $role, $display_name, $capabilities );
  • $role:角色的唯一識別符號。
  • $display_name:在 WordPress 管理面板中顯示的名稱。
  • $capabilities:分配給角色的許可權陣列。

檢視所有許可權的列表

假設我們要建立一個許可權有限的 Moderator 角色。

我將這樣做

  • 開啟活動主題的 functions.php 檔案。

functions.php 檔案

  • 在最後新增以下程式碼:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    add_role('moderator', 'Moderator', array(
    'read' => true,
    'create_posts' => true,
    'edit_posts' => true,
    'edit_others_posts' => true,
    'publish_posts' => true,
    'manage_categories' => true,
    ));<img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="https://www.cloudways.com/blog/wp-content/themes/cloudways/template/img/grey.gif" data-original="images/image36.png" alt="" class="img-responsive"><noscript><img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="images/image36.png" alt="" /></noscript>
    add_role('moderator', 'Moderator', array( 'read' => true, 'create_posts' => true, 'edit_posts' => true, 'edit_others_posts' => true, 'publish_posts' => true, 'manage_categories' => true, ));<img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="https://www.cloudways.com/blog/wp-content/themes/cloudways/template/img/grey.gif" data-original="images/image36.png" alt="" class="img-responsive"><noscript><img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="images/image36.png" alt="" /></noscript>
    add_role('moderator', 'Moderator', array(
    'read' => true,
    'create_posts' => true,
    'edit_posts' => true,
    'edit_others_posts' => true,
    'publish_posts' => true,
    'manage_categories' => true,
    ));<img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="https://www.cloudways.com/blog/wp-content/themes/cloudways/template/img/grey.gif" data-original="images/image36.png" alt="" class="img-responsive"><noscript><img decoding="async" style="background-color: #ffffff; color: #333333; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" title="" src="images/image36.png" alt="" /></noscript>

新增新角色

  • 此程式碼將建立一個新的 Moderator 角色,該角色具有讀取內容、建立和編輯文章(包括他人的文章)、釋出文章和管理類別的許可權。
  • 單擊“更新檔案”儲存更改。
  • 導航至“使用者” → “所有使用者”,你會看到新新增的 Moderator 角色。現在,我們可以將新建立的版主角色分配給一個使用者。

Moderator 角色

為使用者指定 “Moderator”角色

在本例中,讓我們將“Moderator”角色分配給名為 Abdul Rehman 的使用者:

  • 轉到使用者 → 所有使用者
  • 選中使用者名稱 Abdul Rehman
  • “更改角色為...”下拉選單中,選擇“Moderator”。
  • 然後點選旁邊的更改

為使用者指定 “Moderator”角色

  • 現在,當 Abdul Rehman 登入時,他的訪問許可權將僅限於分配給 Moderator 角色的許可權。

Moderator 角色

如何(手動)編輯現有WordPress使用者角色

如果需要通過新增或刪除許可權來修改現有使用者角色,可以使用 add_cap() remove_cap() 函式。

具體操作如下

  • 開啟活動主題的 functions.php 檔案。您已經知道怎麼做了。
  • 使用以下程式碼段修改編輯角色,新增安裝外掛的許可權。請記住,編輯目前沒有訪問外掛的許可權。

修改編輯角色

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function modify_editor_capabilities() {$role = get_role('editor');
if ($role)
$role->add_cap('install_plugins');
}
}
add_action('init', 'modify_editor_capabilities');;
function modify_editor_capabilities() {$role = get_role('editor'); if ($role) $role->add_cap('install_plugins'); } } add_action('init', 'modify_editor_capabilities');;
function modify_editor_capabilities() {$role = get_role('editor');
if ($role)
$role->add_cap('install_plugins');
}
}
add_action('init', 'modify_editor_capabilities');;
  • 新增程式碼後,單擊“更新檔案”儲存更改。

現在,當我以編輯身份登入時,我可以看到外掛部分現在可以訪問了。

新增編輯角色許可權

下面介紹如何從角色中移除許可權:

如果要刪除某個許可權,請使用remove_cap()

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function remove_editor_capability() {
$role = get_role('editor');
if ($role) {
$role->remove_cap('install_plugins');
}
add_action('init', 'remove_editor_capability');
function remove_editor_capability() { $role = get_role('editor'); if ($role) { $role->remove_cap('install_plugins'); } add_action('init', 'remove_editor_capability');
function remove_editor_capability() {
$role = get_role('editor');
if ($role) {
$role->remove_cap('install_plugins');
}
add_action('init', 'remove_editor_capability');

這將取消編輯角色安裝外掛的許可權。

方法 #3. 自定義外掛

預設使用者角色的編​​輯許可權是自定義它們的快速方法。但是,如果您要編輯角色的許多許可權,那麼最好完全建立一個新的自定義使用者角色。通過這種方式,您可以為站點上的每個角色設定所需的確切許可權。

要建立自定義使用者角色,您需要使用add_role()函式。它接受三個引數。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
add_role( $role, $display_name, $capabilities );
add_role( $role, $display_name, $capabilities );
add_role(  $role, $display_name, $capabilities );

前兩個引數應該是函式執行的字串(並且是必需的)。它們分別定義新自定義角色的名稱和顯示名稱。最後一個引數是可選的,應該是一個陣列。您可以使用它為新角色分配所有許可權。

讓我們建立一個名為Community Manager的自定義使用者角色,他可以在整個站點中稽覈評論和編輯文章。以下是您的操作方法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Add Community Manager Role
Version: 1.0
Description: Add a Custom User Role called 'Community Manager'
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: add-community-manager-role
*/
// this code will run only once on plugin activation and never again
function add_community_manager_role() {
add_role(
'community_manager',
__('Community Manager', 'add-community-manager-role'),
array(
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true
)
);
}
register_activation_hook( __FILE__, 'add_community_manager_role' );
<?php /* Plugin Name: Add Community Manager Role Version: 1.0 Description: Add a Custom User Role called 'Community Manager' Author: Salman Ravoof Author URI: https://www.salmanravoof.com/ License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Text Domain: add-community-manager-role */ // this code will run only once on plugin activation and never again function add_community_manager_role() { add_role( 'community_manager', __('Community Manager', 'add-community-manager-role'), array( 'read' => true, 'moderate_comments' => true, 'edit_posts' => true, 'edit_other_posts' => true, 'edit_published_posts' => true ) ); } register_activation_hook( __FILE__, 'add_community_manager_role' );
<?php
/*
Plugin Name:  Add Community Manager Role
Version:  1.0
Description:  Add a Custom User Role called 'Community Manager'
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-community-manager-role
*/
// this code will run only once on plugin activation and never again
function add_community_manager_role() {
add_role(
'community_manager',
__('Community Manager', 'add-community-manager-role'), 
array( 
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true
)
);
}
register_activation_hook( __FILE__, 'add_community_manager_role' );

和以前一樣,add_role()函式僅在外掛啟用時執行一次,並且不再執行。儲存檔案並在管理員儀表盤中啟用外掛。您現在應該能夠將Community Manager角色分配給新使用者和現有使用者。

Community Manager角色

將自定義使用者角色分配給新使用者

將自定義使用者角色分配給現有使用者

將自定義使用者角色分配給現有使用者

您還可以通過檢查資料庫中wp_options表下wp_user_roles欄位的值來驗證分配給此新角色的許可權。這是我在我網站的資料庫中找到的內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
array (
'administrator' =>
// [...]
'editor' =>
// [...]
'author' =>
// [...]
'contributor' =>
// [...]
'subscriber' =>
// [...]
'community_manager' =>
array (
'name' => 'Community Manager',
'capabilities' =>
array (
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true,
),
),
)
array ( 'administrator' => // [...] 'editor' => // [...] 'author' => // [...] 'contributor' => // [...] 'subscriber' => // [...] 'community_manager' => array ( 'name' => 'Community Manager', 'capabilities' => array ( 'read' => true, 'moderate_comments' => true, 'edit_posts' => true, 'edit_other_posts' => true, 'edit_published_posts' => true, ), ), )
array (
'administrator' => 
// [...]
'editor' => 
// [...]
'author' => 
// [...]
'contributor' => 
// [...]
'subscriber' => 
// [...]
'community_manager' => 
array (
'name' => 'Community Manager',
'capabilities' => 
array (
'read' => true,
'moderate_comments' => true,
'edit_posts' => true,
'edit_other_posts' => true,
'edit_published_posts' => true,
),
),
)

最後列出的是我們剛剛新增的具有所有許可權的新角色。您可以通過新增或刪除許可權來進一步編輯此角色。

測試新使用者角色

在將新使用者角色分配給任何真實使用者之前,必須測試它是否按預期工作。這是一個清單,您可以按照以下清單對其進行測試:

  1. 建立一個測試使用者帳戶併為其分配新的使用者角色。
  2. 使用測試使用者登入並確保其所有許可權都按預期工作。例如,如果您已授予它編輯已釋出文章的許可權,則轉到任何文章並檢查您是否可以編輯它。您分配給該角色的許可權越多,您將花費更多的時間來測試它們。
  3. 接下來,嘗試直接在瀏覽器中訪問任何更高階別的管理連結。我通過直接訪問WordPress設定螢幕對此進行了測試,正如預期的那樣,WordPress沒有讓我進入。WordPress顯示的“拒絕訪問”訊息
  4. 完成測試後刪除測試使用者。

差不多就是這樣!現在您可以將新角色分配給您站點的使用者。

您可以使用User Switching或以View Admin As外掛,只需單擊一下即可在您網站上的不同使用者帳戶之間進行切換。它們對於測試多個使用者的許可權非常方便。我將在本文後面詳細介紹它們。

在WordPress多站點中建立自定義使用者角色

WordPress多站點處理使用者角色的方式與WordPress單站點安裝略有不同。雖然您可以像以前一樣使用add_role()函式建立自定義使用者角色,但新角色僅適用於網路的主站點(您建立的第一個站點)。它不會傳播到網路上的所有子站點。

為確保回撥函式中的程式碼在網路中的每個站點上執行,您需要通過逐個迴圈遍歷網路的所有站點來強制其執行。對於這個示例,我將建立一個名為Plugin Manager的新使用者角色,它將具有管理外掛的所有許可權。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Add Plugin Manager Role
Version: 1.0
Description: Add a custom user role named Plugin Manager in a WordPress Multisite Installation
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: add-plugin-manager-role
*/
/*
make the code run on every site in the network
when the plugin is Network Activated
*/
function add_plugin_manager_role( $network_wide ) {
if ( is_multisite() && $network_wide ) {
// run the code for all sites in a Multisite network
foreach ( get_sites(['fields'=>'ids']) as $blog_id ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array(
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
restore_current_blog();
}
else {
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array(
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
}
register_activation_hook( __FILE__, 'add_plugin_manager_role' );
<?php /* Plugin Name: Add Plugin Manager Role Version: 1.0 Description: Add a custom user role named Plugin Manager in a WordPress Multisite Installation Author: Salman Ravoof Author URI: https://www.salmanravoof.com/ License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Text Domain: add-plugin-manager-role */ /* make the code run on every site in the network when the plugin is Network Activated */ function add_plugin_manager_role( $network_wide ) { if ( is_multisite() && $network_wide ) { // run the code for all sites in a Multisite network foreach ( get_sites(['fields'=>'ids']) as $blog_id ) { switch_to_blog( $blog_id ); add_role( 'plugin_manager', __('Plugin Manager', 'add-plugin-manager-role'), array( 'install_plugins' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'delete_plugins' => true ) ); } restore_current_blog(); } else { add_role( 'plugin_manager', __('Plugin Manager', 'add-plugin-manager-role'), array( 'install_plugins' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'delete_plugins' => true ) ); } } register_activation_hook( __FILE__, 'add_plugin_manager_role' );
<?php
/*
Plugin Name:  Add Plugin Manager Role
Version:  1.0
Description:  Add a custom user role named Plugin Manager in a WordPress Multisite Installation
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  add-plugin-manager-role
*/
/* 
make the code run on every site in the network
when the plugin is Network Activated
*/
function add_plugin_manager_role( $network_wide ) {
if ( is_multisite() && $network_wide ) { 
// run the code for all sites in a Multisite network
foreach ( get_sites(['fields'=>'ids']) as $blog_id ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
restore_current_blog();
}
else {
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
}
}
register_activation_hook( __FILE__, 'add_plugin_manager_role' );

讓我們詳細看一下上面的程式碼:

  • 首先,您使用register_activation_hook()函式掛鉤外掛啟用動作並傳入您的回撥函式。這裡,回撥函式是add_plugin_manager_role().
  • 然後你定義你的回撥函式,並傳入一個名為$network_wide的引數.
  • $network_wide引數是一個布林值,如果您為整個網路啟用了外掛,它將返回true。如果僅為當前站點啟用,則返回false。此外,它僅適用於多站點安裝,其預設值為false
  • is_multisite() && $network_wide條件語句檢查外掛在多站點安裝中是否為“網路啟用” 。如果是true,它將執行If語句中包含的程式碼。如果是false,則執行語句中else的程式碼。
  • get_sites(['fields'=>'ids'])函式返回網路中所有站點ID的列表。使用foreach()PHP函式,它迴圈遍歷所有這些程式碼,以分別在每個網站上執行程式碼。
  •  switch_to_blog( $blog_id )函式指示接下來的幾行程式碼為$blog_id的子網站執行。由於WordPress最初是作為一個部落格平臺啟動的,因此您可以將“blog”一詞替換為“site”,以便更好地理解其用法。
  • 接下來,您使用add_role()函式建立具有其許可權的自定義使用者角色。這遵循與本文前面解釋的相同的程式碼約定。
  • 在終止迴圈之前,定義restore_current_blog()函式以確保您將切換的站點狀態恢復到其原始狀態。
  • else語句中的程式碼是確保與單站點安裝相容的備用程式碼。

儲存外掛檔案並轉到網路管理 > 外掛螢幕以“網路啟用”您的自定義外掛。之後,前往站點的任何編輯站點螢幕下的使用者選項卡,檢查新的外掛管理器角色是否可用。

將現有站點使用者的角色更改為新使用者角色

將現有站點使用者的角色更改為新使用者角色

將自定義使用者角色分配給子站點的新使用者

將自定義使用者角色分配給子站點的新使用者

我還確認了這個新使用者角色在網路中的其他站點上可用。它完美無缺。

將新使用者角色分配給子站點上的現有使用者

將新使用者角色分配給子站點上的現有使用者

您還可以通過檢視您站點的資料庫來驗證新的自定義角色及其許可權。但是,與單站點安裝不同,WordPress Multisite為每個子站點建立一個單獨的wp_options表。

使用者角色儲存在WordPress多站點資料庫中的位置

使用者角色儲存在WordPress多站點資料庫中的位置

您可以找到列為wp_2_optionswp_3_optionswp_4_options的子網站特定表。同樣,角色和許可權儲存在各自的欄位中,分別名為wp_2_user_roleswp_3_user_roleswp_4_user_roles

您已經定義瞭如何在網路中的所有站點上建立自定義使用者角色,但是將來要建立的站點呢?為確保將此自定義使用者角色新增到網路中建立的每個新站點,您可以將以下程式碼附加到您的外掛中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// run the code once again when a new site is created
function add_custom_user_role_new_site( $blog_id ) {
// check whether the plugin is active for the network
if ( is_plugin_active_for_network( 'add-custom-user-role/add-custom-user-role.php' ) ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array(
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
restore_current_blog();
}
}
add_action( 'wpmu_new_blog', 'add_custom_user_role_new_site' );
// run the code once again when a new site is created function add_custom_user_role_new_site( $blog_id ) { // check whether the plugin is active for the network if ( is_plugin_active_for_network( 'add-custom-user-role/add-custom-user-role.php' ) ) { switch_to_blog( $blog_id ); add_role( 'plugin_manager', __('Plugin Manager', 'add-plugin-manager-role'), array( 'install_plugins' => true, 'activate_plugins' => true, 'edit_plugins' => true, 'delete_plugins' => true ) ); restore_current_blog(); } } add_action( 'wpmu_new_blog', 'add_custom_user_role_new_site' );
// run the code once again when a new site is created
function add_custom_user_role_new_site( $blog_id ) { 
// check whether the plugin is active for the network
if ( is_plugin_active_for_network( 'add-custom-user-role/add-custom-user-role.php' ) ) {
switch_to_blog( $blog_id );
add_role(
'plugin_manager',
__('Plugin Manager', 'add-plugin-manager-role'),
array( 
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
'delete_plugins' => true
)
);
restore_current_blog();
}
}
add_action( 'wpmu_new_blog', 'add_custom_user_role_new_site' );
  • 每當有人在多站點網路中建立新站點時,wpmu_new_blog動作就會觸發您可以使用回撥函式掛鉤此操作以新增自定義使用者角色。
  • is_plugin_active_for_network ()函式檢查外掛是否對整個網路都處於活動狀態,並返回一個布林值。它接受外掛檔案的路徑作為引數。
  • 其餘程式碼遵循與之前相同的邏輯。您使用$blog_id引數切換到新站點,使用add_role()函式建立您的自定義角色,然後使用restore_current_blog()函式切換回當前站點。

如何自定義WordPress使用者角色許可權

您可以向現有使用者角色新增許可權以提高其訪問級別。例如,您可以賦予編輯器管理外掛的權力。或者,也許您希望貢獻者對他們自己的文章進行稽覈。讓我們學習如何做到這一點。

注意:如果您不喜歡使用程式碼,您可以跳過手動方法,直接轉到下面的使用者角色和許可權外掛部分。或者乾脆聘請WordPress開發人員。

如何向使用者角色新增許可權

您可以使用WordPress add_cap() 函式向使用者角色或任何特定使用者新增許可權。我將使用一個名為Customize User Role的自定義外掛來展示如何使用此函式來賦予Editor角色管理外掛的許可權。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Customize User Role
Version: 1.0
Description: Demonstrating how to customize WordPress User Roles.
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: customize-user-role
*/
<?php /* Plugin Name: Customize User Role Version: 1.0 Description: Demonstrating how to customize WordPress User Roles. Author: Salman Ravoof Author URI: https://www.salmanravoof.com/ License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Text Domain: customize-user-role */
<?php
/*
Plugin Name:  Customize User Role
Version:  1.0
Description:  Demonstrating how to customize WordPress User Roles.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-user-role
*/

WordPress建議在外掛或主題啟用時執行此函式,因為它新增的設定儲存到資料庫中wp_options表中wp_user_roles欄位下。每次載入任何頁面時都執行此函式效率低下,因為每次載入頁面時資料庫表都會不斷被覆蓋。

由於我使用的是外掛,因此我將使用register_activation_hook()函式掛鉤到您啟用外掛時執行的動作。有很多方法可以做到這一點,但我使用了一個健壯的基於類的實現來確保沒有衝突。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// this code runs only during plugin activation and never again
function sal_customize_user_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-user-role.php';
Sal_Customize_User_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_user_role' );
// this code runs only during plugin activation and never again function sal_customize_user_role() { require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-user-role.php'; Sal_Customize_User_Role::activate(); } register_activation_hook( __FILE__, 'sal_customize_user_role' );
// this code runs only during plugin activation and never again
function sal_customize_user_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-user-role.php';   
Sal_Customize_User_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_user_role' );

上面的程式碼在外掛啟用期間只執行一次。鉤子函式sal_customize_user_role引用了一個名為Sal_Customize_User_Role自定義類.

我已經在一個名為的單獨檔案class-sal-customize-user-role.php中定義了這個類,並將它放在我的外掛根資料夾中的一個名為includes的子資料夾中,但你可以隨意命名它。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
class Sal_Customize_User_Role {
public static function activate() {
// get the Editor role's object from WP_Role class
$editor = get_role( 'editor' );
// a list of plugin-related capabilities to add to the Editor role
$caps = array(
'install_plugins',
'activate_plugins',
'edit_plugins',
'delete_plugins'
);
// add all the capabilities by looping through them
foreach ( $caps as $cap ) {
$editor->add_cap( $cap );
}
}
}
<?php class Sal_Customize_User_Role { public static function activate() { // get the Editor role's object from WP_Role class $editor = get_role( 'editor' ); // a list of plugin-related capabilities to add to the Editor role $caps = array( 'install_plugins', 'activate_plugins', 'edit_plugins', 'delete_plugins' ); // add all the capabilities by looping through them foreach ( $caps as $cap ) { $editor->add_cap( $cap ); } } }
<?php
class Sal_Customize_User_Role {
public static function activate() {
// get the Editor role's object from WP_Role class
$editor = get_role( 'editor' );
// a list of plugin-related capabilities to add to the Editor role
$caps = array(
'install_plugins',
'activate_plugins',
'edit_plugins',
'delete_plugins' 
); 
// add all the capabilities by looping through them
foreach ( $caps as $cap ) {
$editor->add_cap( $cap );
}
}
}

下面是對上述程式碼的詳細解釋:

  • 首先定義您在主外掛檔案中引用的類及其函式。
  • get_role(‘editor’)函式從WP_Role類中檢索Editor角色物件並將其分配給$editor變數。
  • 管理外掛需要四個許可權:install_pluginsactivate_pluginsedit_pluginsdelete_plugins。但是add_cap()函式只接受一個引數。因此,我們需要在陣列中包含所有許可權。定義$caps陣列以容納所有這些許可權。如果您只新增一項許可權,則無需定義陣列。
  • add_cap( $cap )函式通過使用PHP函式foreach ()迴圈新增$caps陣列中定義的所有許可權。

儲存所有外掛檔案,然後從管理員儀表板啟用外掛。現在讓我們登入到編輯器儀表盤以檢視更改。

編輯者現在可以從他們的儀表板管理外掛

編輯者現在可以從他們的儀表板管理外掛

將與外掛相關的許可權新增到其使用者角色後,編輯者可以看到其管理選單中列出的外掛選單。

編輯器儀表盤中的“新增外掛”螢幕

編輯器儀表盤中的“新增外掛”螢幕

您可以通過檢視儲存在WordPress站點資料庫wp_options表中的wp_user_roles鍵值來檢查分配給每個使用者角色的許可權。

以下是我發現分配給編輯角色的許可權:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
'editor' =>
array (
'name' => 'Editor',
'capabilities' =>
array (
'moderate_comments' => true,
'manage_categories' => true,
// [...lines cut off for brevity...]
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
),
),
'editor' => array ( 'name' => 'Editor', 'capabilities' => array ( 'moderate_comments' => true, 'manage_categories' => true, // [...lines cut off for brevity...] 'install_plugins' => true, 'activate_plugins' => true, 'edit_plugins' => true, ), ),
'editor' => 
array (
'name' => 'Editor',
'capabilities' => 
array (
'moderate_comments' => true,
'manage_categories' => true,
// [...lines cut off for brevity...]
'install_plugins' => true,
'activate_plugins' => true,
'edit_plugins' => true,
),
),

請注意最後三行,它使編輯器能夠管理外掛。

如果要刪除這些許可權,可以掛鉤到register_deactivation_hook()函式並使用remove_cap()函式刪除外掛停用的許可權,就像我們在外掛啟用時新增這些許可權一樣。

既然您已經瞭解瞭如何向使用者角色新增許可權,那麼現在該學習如何從使用者角色中刪除許可權了。

注意:您還可以掛鉤after_switch_theme動作以在主題(和/或子主題)啟用期間觸發此程式碼。在這裡,您必須在主題或子主題的(推薦)functions.php檔案中包含程式碼。

如何從使用者角色中刪除許可權

有時,您可能希望從使用者角色中刪除一項許可權。您可以執行remove_cap()函式來刪除角色或特定使用者的許可權。例如,delete_published_posts從Author使用者角色中刪除釋出文章許可權是一個好主意。

讓我們完成這件事!

我將建立一個名為Customize Author Role的新自定義外掛來開始。就像以前一樣,我將通過掛鉤register_activation_hook()函式只執行此程式碼一次。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Customize Author Role
Version: 1.0
Description: Demonstrating how to customize WordPress Author Role.
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: customize-author-role
*/
// this code runs only during plugin activation and never again
function sal_customize_author_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-author-role.php';
Sal_Customize_Author_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_author_role' );
<?php /* Plugin Name: Customize Author Role Version: 1.0 Description: Demonstrating how to customize WordPress Author Role. Author: Salman Ravoof Author URI: https://www.salmanravoof.com/ License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Text Domain: customize-author-role */ // this code runs only during plugin activation and never again function sal_customize_author_role() { require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-author-role.php'; Sal_Customize_Author_Role::activate(); } register_activation_hook( __FILE__, 'sal_customize_author_role' );
<?php
/*
Plugin Name:  Customize Author Role
Version:  1.0
Description:  Demonstrating how to customize WordPress Author Role.
Author:  Salman Ravoof
Author URI:  https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  customize-author-role
*/
// this code runs only during plugin activation and never again
function sal_customize_author_role() {
require_once plugin_dir_path( __FILE__ ).'includes/class-sal-customize-author-role.php';
Sal_Customize_Author_Role::activate();
}
register_activation_hook( __FILE__, 'sal_customize_author_role' );

接下來,我將在檔案中定義Sal_Customize_Author_Role類。我在上面的主外掛檔案class-sal-customize-author-role.php中引用了這兩個資源。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
class Sal_Customize_Author_Role {
public static function activate() {
// get the Editor role's object from WP_Role class
$author = get_role( 'author' );
// remove the capability to delete published posts from an Author role
$author->remove_cap( 'delete_published_posts' );
}
}
<?php class Sal_Customize_Author_Role { public static function activate() { // get the Editor role's object from WP_Role class $author = get_role( 'author' ); // remove the capability to delete published posts from an Author role $author->remove_cap( 'delete_published_posts' ); } }
<?php
class Sal_Customize_Author_Role { 
public static function activate() {
// get the Editor role's object from WP_Role class
$author = get_role( 'author' );
// remove the capability to delete published posts from an Author role
$author->remove_cap( 'delete_published_posts' );
}
}

remove_cap( 'delete_published_posts' )函式將刪除從作者角色中刪除已釋出文章的許可權。

預設情況下,允許作者刪除其已釋出的文章

預設情況下,允許作者刪除其已釋出的文章

是時候儲存所有外掛檔案然後啟用外掛了。現在,登入到作者儀表盤並檢視更改。

作者不能再刪除他們釋出的文章

作者不能再刪除他們釋出的文章

回收站選項不再適用於作者釋出的文章。但是,他們仍然可以刪除處於草稿待處理狀態的未釋出文章。

刪除處於草稿或待處理狀態的未釋出文章

如果您甚至想禁用此許可權,則還需要從作者角色中刪除delete_posts許可權。

為特定使用者新增或刪除許可權

如果您想為特定使用者新增許可權,而不是整個使用者角色,那麼您可以使用WP_User::add_cap()類函式來新增許可權。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// get the user object by their ID
$user = new WP_User( $user_id );
// add the capability to the specific user
$user->add_cap( $cap );
// get the user object by their ID $user = new WP_User( $user_id ); // add the capability to the specific user $user->add_cap( $cap );
// get the user object by their ID
$user = new WP_User( $user_id ); 
// add the capability to the specific user
$user->add_cap( $cap );

您可以使用get_user_by()函式通過使用他們的電子郵件、登入使用者名稱或slug來檢索任何使用者的ID。

同樣,您可以使用WP_User::remove_cap()類函式從特定使用者中刪除許可權。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// get the user object by their ID
$user = new WP_User( $user_id );
// add the capability to the specific user
$user->add_cap( $cap );
// get the user object by their ID $user = new WP_User( $user_id ); // add the capability to the specific user $user->add_cap( $cap );
// get the user object by their ID
$user = new WP_User( $user_id );
// add the capability to the specific user
$user->add_cap( $cap );

像以前一樣,僅在外掛或主題啟用時執行這些許可權以保持程式碼優化。

注意:add_cap()remove_cap()都是WP_Role類的物件方法。您不能直接在程式碼中呼叫它們。您需要使用get_role()函式或$wp_roles全域性變數來訪問它們。

複製使用者角色

您可以通過克隆現有使用者角色的所有許可權來建立新使用者角色。您可以這樣做:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
add_role( 'clone', 'Clone', get_role( 'administrator' )->capabilities );
add_role( 'clone', 'Clone', get_role( 'administrator' )->capabilities );
add_role( 'clone', 'Clone', get_role( 'administrator' )->capabilities );

在上面的示例中,我正在建立一個名為Clone的新角色,該角色具有與管理員相同的許可權。在主題或外掛啟用上執行此程式碼將確保克隆的角色僅新增一次。

建立自定義許可權

對於大多數用例來說,使用WordPress的內建許可權編輯現有使用者角色和建立新的自定義角色就足夠了,但您可能希望為自定義程式碼(使用外掛或主題)引入的函式定義新許可權。

然後,您可以使用這些自定義許可權來定義新角色或將它們新增到現有角色中。

例如,WooCommerce新增了額外的許可權和角色以及其廣泛的電子商務許可權。它新增的一些許可權是:

  • 允許管理WooCommerce設定
  • 建立和編輯產品
  • 檢視WooCommerce報告

使用這些許可權,它新增了兩個新的使用者角色:CustomerShop Manager

WooCommerce新增自己的使用者角色

WooCommerce新增自己的使用者角色

客戶角色與訂閱者角色幾乎相似,不同之處在於具有客戶角色的使用者可以編輯其帳戶資訊並檢視當前/過去的訂單。Shop Manager角色包括編輯器的所有許可權,此外還授予他們所有WooCommerce許可權。

其他引入自定義許可權和/或角色的外掛包括The Events CalendarVisual PortfolioWPMLWP ERP

如果您深入研究所有這些外掛的文件,您會注意到它們幾乎將所有自定義許可權都與它們定義的自定義文章型別聯絡在一起。在WooCommerce的情況下,它是ProductsOrders自定義文章型別,而在其他情況下,它分別是EventsPortfoliosTranslationsCustomers

讓我們學習如何建立繫結到自定義文章型別的自定義許可權。

首先,設定一個外掛並註冊您想要的自定義文章型別。在我的示例中,我正在註冊一個名為Stories的新自定義文章型別。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Custom Post Type and Capabilities
Version: 1.0
Description: Register a custom post type and define custom capabilities tied into it.
Author: Salman Ravoof
Author URI: https://www.salmanravoof.com/
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: custom-post-type-capabilities
*/
// register a custom post type, in this case it's called "story" //
function cpt_story_init() {
$labels = array(
'name' => _x( 'Stories', 'custom-post-type-capabilities' ),
'singular_name' => _x( 'Story', 'custom-post-type-capabilities' ),
'menu_name' => _x( 'Stories', 'Admin Menu text', 'custom-post-type-capabilities' ),
'name_admin_bar' => _x( 'Story', 'Add New on Toolbar', 'custom-post-type-capabilities' ),
'add_new' => __( 'Add New', 'custom-post-type-capabilities' ),
'add_new_item' => __( 'Add New Story', 'custom-post-type-capabilities' ),
'new_item' => __( 'New Story', 'custom-post-type-capabilities' ),
'edit_item' => __( 'Edit Story', 'custom-post-type-capabilities' ),
'view_item' => __( 'View Story', 'custom-post-type-capabilities' ),
'all_items' => __( 'All Stories', 'custom-post-type-capabilities' ),
'search_items' => __( 'Search Stories', 'custom-post-type-capabilities' ),
'parent_item_colon' => __( 'Parent Stories:', 'custom-post-type-capabilities' ),
'not_found' => __( 'No stories found.', 'custom-post-type-capabilities' ),
'not_found_in_trash' => __( 'No stories found in Trash.', 'custom-post-type-capabilities' ),
'featured_image' => _x( 'Story Cover Image', 'custom-post-type-capabilities' ),
'set_featured_image' => _x( 'Set cover image', 'custom-post-type-capabilities' ),
'remove_featured_image' => _x( 'Remove cover image', 'custom-post-type-capabilities' ),
'use_featured_image' => _x( 'Use as cover image', 'custom-post-type-capabilities' ),
'archives' => _x( 'Story archives', 'custom-post-type-capabilities' ),
'insert_into_item' => _x( 'Insert into story', 'custom-post-type-capabilities' ),
'uploaded_to_this_item' => _x( 'Uploaded to this story', 'custom-post-type-capabilities' ),
'filter_items_list' => _x( 'Filter stories list', 'custom-post-type-capabilities' ),
'items_list_navigation' => _x( 'Stories list navigation', 'custom-post-type-capabilities' ),
'items_list' => _x( 'Stories list', 'custom-post-type-capabilities' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_icon' => 'dashicons-book',
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'story' ),
'capability_type' => array ( 'story', 'stories' ),
'map_meta_cap' => true,
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 6,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'show_in_rest' => true,
);
register_post_type( 'story', $args );
}
add_action( 'init', 'cpt_story_init' );
<?php /* Plugin Name: Custom Post Type and Capabilities Version: 1.0 Description: Register a custom post type and define custom capabilities tied into it. Author: Salman Ravoof Author URI: https://www.salmanravoof.com/ License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Text Domain: custom-post-type-capabilities */ // register a custom post type, in this case it's called "story" // function cpt_story_init() { $labels = array( 'name' => _x( 'Stories', 'custom-post-type-capabilities' ), 'singular_name' => _x( 'Story', 'custom-post-type-capabilities' ), 'menu_name' => _x( 'Stories', 'Admin Menu text', 'custom-post-type-capabilities' ), 'name_admin_bar' => _x( 'Story', 'Add New on Toolbar', 'custom-post-type-capabilities' ), 'add_new' => __( 'Add New', 'custom-post-type-capabilities' ), 'add_new_item' => __( 'Add New Story', 'custom-post-type-capabilities' ), 'new_item' => __( 'New Story', 'custom-post-type-capabilities' ), 'edit_item' => __( 'Edit Story', 'custom-post-type-capabilities' ), 'view_item' => __( 'View Story', 'custom-post-type-capabilities' ), 'all_items' => __( 'All Stories', 'custom-post-type-capabilities' ), 'search_items' => __( 'Search Stories', 'custom-post-type-capabilities' ), 'parent_item_colon' => __( 'Parent Stories:', 'custom-post-type-capabilities' ), 'not_found' => __( 'No stories found.', 'custom-post-type-capabilities' ), 'not_found_in_trash' => __( 'No stories found in Trash.', 'custom-post-type-capabilities' ), 'featured_image' => _x( 'Story Cover Image', 'custom-post-type-capabilities' ), 'set_featured_image' => _x( 'Set cover image', 'custom-post-type-capabilities' ), 'remove_featured_image' => _x( 'Remove cover image', 'custom-post-type-capabilities' ), 'use_featured_image' => _x( 'Use as cover image', 'custom-post-type-capabilities' ), 'archives' => _x( 'Story archives', 'custom-post-type-capabilities' ), 'insert_into_item' => _x( 'Insert into story', 'custom-post-type-capabilities' ), 'uploaded_to_this_item' => _x( 'Uploaded to this story', 'custom-post-type-capabilities' ), 'filter_items_list' => _x( 'Filter stories list', 'custom-post-type-capabilities' ), 'items_list_navigation' => _x( 'Stories list navigation', 'custom-post-type-capabilities' ), 'items_list' => _x( 'Stories list', 'custom-post-type-capabilities' ), ); $args = array( 'labels' => $labels, 'public' => true, 'menu_icon' => 'dashicons-book', 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'story' ), 'capability_type' => array ( 'story', 'stories' ), 'map_meta_cap' => true, 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 6, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ), 'show_in_rest' => true, ); register_post_type( 'story', $args ); } add_action( 'init', 'cpt_story_init' );
<?php
/*
Plugin Name:    Custom Post Type and Capabilities
Version:        1.0
Description:    Register a custom post type and define custom capabilities tied into it.
Author:         Salman Ravoof
Author URI:     https://www.salmanravoof.com/
License:        GPLv2 or later
License URI:    https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:    custom-post-type-capabilities
*/
// register a custom post type, in this case it's called "story" //
function cpt_story_init() {
$labels = array(
'name'                  => _x( 'Stories', 'custom-post-type-capabilities' ),
'singular_name'         => _x( 'Story', 'custom-post-type-capabilities' ),
'menu_name'             => _x( 'Stories', 'Admin Menu text', 'custom-post-type-capabilities' ),
'name_admin_bar'        => _x( 'Story', 'Add New on Toolbar', 'custom-post-type-capabilities' ),
'add_new'               => __( 'Add New', 'custom-post-type-capabilities' ),
'add_new_item'          => __( 'Add New Story', 'custom-post-type-capabilities' ),
'new_item'              => __( 'New Story', 'custom-post-type-capabilities' ),
'edit_item'             => __( 'Edit Story', 'custom-post-type-capabilities' ),
'view_item'             => __( 'View Story', 'custom-post-type-capabilities' ),
'all_items'             => __( 'All Stories', 'custom-post-type-capabilities' ),
'search_items'          => __( 'Search Stories', 'custom-post-type-capabilities' ),
'parent_item_colon'     => __( 'Parent Stories:', 'custom-post-type-capabilities' ),
'not_found'             => __( 'No stories found.', 'custom-post-type-capabilities' ),
'not_found_in_trash'    => __( 'No stories found in Trash.', 'custom-post-type-capabilities' ),
'featured_image'        => _x( 'Story Cover Image', 'custom-post-type-capabilities' ),
'set_featured_image'    => _x( 'Set cover image', 'custom-post-type-capabilities' ),
'remove_featured_image' => _x( 'Remove cover image', 'custom-post-type-capabilities' ),
'use_featured_image'    => _x( 'Use as cover image', 'custom-post-type-capabilities' ),
'archives'              => _x( 'Story archives', 'custom-post-type-capabilities' ),
'insert_into_item'      => _x( 'Insert into story', 'custom-post-type-capabilities' ),
'uploaded_to_this_item' => _x( 'Uploaded to this story', 'custom-post-type-capabilities' ),
'filter_items_list'     => _x( 'Filter stories list', 'custom-post-type-capabilities' ),
'items_list_navigation' => _x( 'Stories list navigation', 'custom-post-type-capabilities' ),
'items_list'            => _x( 'Stories list', 'custom-post-type-capabilities' ),
);
$args = array(
'labels'             => $labels,
'public'             => true,
'menu_icon'          => 'dashicons-book',   
'publicly_queryable' => true,
'show_ui'            => true,
'show_in_menu'       => true,
'query_var'          => true,
'rewrite'            => array( 'slug' => 'story' ),
'capability_type'    => array ( 'story', 'stories' ),
'map_meta_cap'       => true,
'has_archive'        => true,
'hierarchical'       => false,
'menu_position'      => 6,
'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'show_in_rest'       => true,
);
register_post_type( 'story', $args );
}
add_action( 'init', 'cpt_story_init' );

以下是上述指令碼的細分:

  • 使用register_post_type()函式來註冊您的自定義文章型別。您可以掛鉤到init動作以執行此函式。
  • register_post_type()函式接受兩個引數。第一個是自定義文章型別的名稱,第二個是包含用於註冊文章型別的所有引數的陣列。
  • $args變數包含您將傳遞給register_post_type()函式的所有引數。它的一個引數(‘labels’)本身就是一個單獨定義為$label變數的陣列。
  • 請注意'capability_type' => 'post'引數。它是WordPress用於為自定義文章型別構建讀取、編輯和刪除的預設許可權型別。
  • 要建立自定義許可權,您需要將capability_type引數的值替換為自定義許可權的首選名稱。它接受字串或陣列作為引數。如果您的自定義許可權的複數不遵循標準的s字尾語法(例如book/books vs story/stories),該陣列很有用。
  • 您還可以使用capabilities引數以不同於WordPress自動命名的方式命名新許可權。
  • 您必須將您的自定義許可權對映到WordPress的原始許可權。將map_meta_cap引數設定為,true以便WordPress知道它需要按照建議對映自定義許可權。

接下來,您需要將自定義許可權新增到要授予對Stories自定義文章型別的訪問許可權的角色。對於此示例,我將許可權授予管理員和編輯者角色。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// add the custom capabilities to the desired user roles
$roles = array( 'editor','administrator' );
foreach( $roles as $the_role ) {
$role = get_role($the_role);
$role->add_cap( 'read' );
$role->add_cap( 'read_story');
$role->add_cap( 'read_private_stories' );
$role->add_cap( 'edit_story' );
$role->add_cap( 'edit_stories' );
$role->add_cap( 'edit_others_stories' );
$role->add_cap( 'edit_published_stories' );
$role->add_cap( 'publish_stories' );
$role->add_cap( 'delete_others_stories' );
$role->add_cap( 'delete_private_stories' );
$role->add_cap( 'delete_published_stories' );
}
// add the custom capabilities to the desired user roles $roles = array( 'editor','administrator' ); foreach( $roles as $the_role ) { $role = get_role($the_role); $role->add_cap( 'read' ); $role->add_cap( 'read_story'); $role->add_cap( 'read_private_stories' ); $role->add_cap( 'edit_story' ); $role->add_cap( 'edit_stories' ); $role->add_cap( 'edit_others_stories' ); $role->add_cap( 'edit_published_stories' ); $role->add_cap( 'publish_stories' ); $role->add_cap( 'delete_others_stories' ); $role->add_cap( 'delete_private_stories' ); $role->add_cap( 'delete_published_stories' ); }
// add the custom capabilities to the desired user roles 
$roles = array( 'editor','administrator' );
foreach( $roles as $the_role ) {      
$role = get_role($the_role);
$role->add_cap( 'read' );
$role->add_cap( 'read_story');
$role->add_cap( 'read_private_stories' );
$role->add_cap( 'edit_story' );
$role->add_cap( 'edit_stories' );
$role->add_cap( 'edit_others_stories' );
$role->add_cap( 'edit_published_stories' );
$role->add_cap( 'publish_stories' );
$role->add_cap( 'delete_others_stories' );
$role->add_cap( 'delete_private_stories' );
$role->add_cap( 'delete_published_stories' );
}

儲存檔案,然後啟用外掛。您現在應該在管理員或編輯器儀表盤中看到Stories連結和麵板。

WordPress儀表盤中的“Stories”自定義文章型別面板

WordPress儀表盤中的“Stories”自定義文章型別面板

如果您檢查站點上可用的許可權,您還將看到我們新增的所有與Stories相關的許可權。在這裡,我使用View Admin As外掛來檢查許可權。

與“Stories”自定義文章型別相關的自定義許可權

與“Stories”自定義文章型別相關的自定義許可權

您可以通過Gist下載此外掛的擴充套件版本。它使用一組自定義許可權註冊了一個名為Projects的自定義文章型別。然後,它會將他們分配給名為StudentTeachers的兩個自定義角色, 以幫助您建立一個教育網站。

有一種方法可以定義自定義許可權,允許使用者根據他們的角色訪問您的外掛設定。討論如何執行此操作超出了本文的範圍,但您可以參考StackExchange上的關於此內容的文章以獲取更多資訊。

最好的WordPress使用者角色和許可權外掛

知道如何使用程式碼調整使用者角色和許可權固然很棒,但並不適合所有人。如果您不確定自己在做什麼,那麼很多事情都會出錯。但是,即使您使用的是外掛,瞭解角色和許可權在WordPress中的工作方式也會有很大幫助。

讓我們看一些最流行的WordPress外掛,以輕鬆自定義WordPress使用者角色和許可權。我還將列出一些有用的外掛來快速測試角色和許可權特性。

User Role Editor (by Vladimir Garagulia)

WordPress外掛-User Role Editor

WordPress外掛-User Role Editor

User Role Editor是WordPress外掛庫中最流行的角色和許可權管理外掛。它帶有一個簡單的介面,允許任何人只需單擊一下即可編輯使用者角色和許可權。

安裝並啟用外掛後,您可以轉到管理儀表板中的使用者 > User Role Editor以訪問其主介面。

User Role Editor儀表盤

User Role Editor儀表盤

以下是上面標記的儀表盤部分的詳細概述:

  1. 從下拉選單中選擇要自定義的角色。它不僅會列出預設角色,還會列出資料庫中存在的所有角色。您還可以選擇以人類可讀的形式而不是它們的常量來顯示許可權。另一個選項可讓您檢視最新版本的WordPress不再支援的已棄用函式。
  2. 使用者角色編輯器將所有許可權分組到左側的不同類別中。核心類別包括所有內建許可權。由於我在此站點上安裝了WooCommerce,因此您還可以找到其自定義文章型別的許可權。甚至User Role Editor外掛也新增了自己的一組自定義許可權。
  3. 在右側,您會發現列出的所有許可權。當我選擇了All組時,我可以看到所有許可權。但是,您可以通過單擊左側的組來過濾它。您還可以勾選頂部的僅授予選項以隱藏任何使用者角色未使用的所有許可權。
  4. 您還可以從此處Add RoleRename RoleAdd CapabilityDelete Role。在最底部,您會發現隱藏使用者角色的管理欄的附加選項。

以人類可讀的形式顯示許可權

以人類可讀的形式顯示許可權

要自定義任何使用者角色,只需勾選或取消勾選您想要的許可權,然後單擊Update按鈕以儲存您的更改。就這麼容易。

在User Role Editor中新增新角色

在User Role Editor中新增新角色

單擊Add Role按鈕以建立新角色。您可以使用Make copy of下拉選項從頭開始建立角色或複製現有角色。

輕鬆重新命名“角色顯示名稱”

輕鬆重新命名“角色顯示名稱”

您還可以通過單擊Rename Role按鈕來重新命名Role Display Name但是,您不能更改其Role ID(或角色名稱)。一種解決方法是複製要更改其ID的角色,然後刪除原始角色。

在User Role Editor中新增新許可權

在User Role Editor中新增新許可權

您可以通過單擊Add Capability按鈕來新增新許可權。

輕鬆刪除未分配的使用者角色

輕鬆刪除未分配的使用者角色

單擊Delete Roles按鈕可讓您刪除尚未分配給任何使用者的自定義角色。

注意:User Role Editor不允許您刪除WordPress的內建角色或許可權。如果它分配給任何使用者,它也不允許您刪除任何自定義角色,如果它分配給任何非管理員角色,它也不允許您刪除任何自定義許可權。

User Role Editor中的“Delete Capability”按鈕

User Role Editor中的“Delete Capability”按鈕

您應該注意,僅當未將任何許可權分配給非管理員時,才會顯示Delete Capability按鈕。否則它是隱藏的。

您還可以為同一使用者分配多個角色,或者根本不給他們任何角色。

剝離使用者的任何角色

剝離使用者的任何角色

要為使用者分配多個角色,您需要轉到儀表板中的“Users”面板,然後單擊將滑鼠懸停在使用者名稱上後將在下面看到的“Capabilities連結。

為同一使用者分配多個角色

為同一使用者分配多個角色

如果您在管理儀表盤中轉到Settings > User Role Editor,您還將找到使用者角色編輯器外掛的其他選項。

User Role Editor的“General”選項選項卡

User Role Editor的“General”選項選項卡

在這裡,您可以更改外掛的預設設定、安裝附加模組、更改分配給新使用者的預設角色,甚至將使用者角色和許可權重置為預設狀態。

附加模組可幫助您擴充套件User Role Editor的功能

附加模組可幫助您擴充套件User Role Editor的功能

為新使用者設定預設角色

為新使用者設定預設角色

將所有使用者角色和許可權重置為其預設狀態

將所有使用者角色和許可權重置為其預設狀態

雖然User Role Editor的免費版本對於大多數用例來說已經綽綽有餘,但其高階版本包括更多功能,包括支援在WordPress多站點設定中管理角色和許可權。

Members by MemberPress

MemberPress開放的WordPress外掛-Members

MemberPress開放的WordPress外掛-Members

Members是WordPress的一個以會員為中心的使用者角色和許可權外掛。最初作為一個簡單的使用者角色和許可權管理外掛推出,它後來轉向會員功能。

Members中的“Roles”面板

Members中的“Roles”面板

安裝並啟用外掛後,您可以通過轉到儀表板中的Members> Roles來檢視站點上的所有可用角色。

成員外掛允許您刪除所有角色,包括內建的WordPress角色,除了管理員和預設角色。您還可以EditClone角色,以及列出分配給特定角色的所有使用者。

Members中的“Edit Role”面板

Members中的“Edit Role”面板

在“Edit Role”面板中,您可以通過勾選和取消勾選相關覈取方塊來授予或明確拒絕特定角色的許可權。您還可以從此處向角色新增自定義許可權。

Members中的“Add New Role”面板

Members中的“Add New Role”面板

單擊“Add New Role連結將帶您進入一個類似的螢幕,您可以在其中通過給它一個顯示名稱、一個ID和它的一組許可權來建立一個新角色。

Members中的“General Settings”面板

Members中的“General Settings”面板

就像使用User Role Editor一樣,您可以使用Members為使用者分配多個角色。您還可以設定內容許可權以將內容限制為僅具有特定角色的使用者。

您還可以在Members中啟用“Private Site”模式

您還可以在Members中啟用“Private Site”模式

在這裡,您可以將您的網站及其提要設定為私有。此外,您可以通過強制身份驗證來限制對WordPress的REST API的訪問。

Members外掛的各種附加元件

Members外掛的各種附加元件

Members外掛以其驚人的附加元件與其他角色和許可權外掛區分開來。它們可幫助您向網站新增大量附加許可權,例如使用者隱私和個人資料管理 ( GDPR )、與標籤和類別相關的許可權、建立角色層次結構等等。

Members與流行的WordPress外掛整合

Members與流行的WordPress外掛整合

您可以將Members與許多流行的WordPress外掛無縫整合。例如,您可以使用它來建立和管理高階自定義欄位 (ACF) 外掛的自定義許可權。它整合的其他一些外掛包括Easy Digital Downloads、GiveWP、Meta Box和WooCommerce。

以會員為中心的會員附加元件(付款、訂閱、電子郵件營銷和高階內容保護)僅在其高階版本上可用。

WPFront User Role Editor

“WPFront User Role Editor”外掛

“WPFront User Role Editor”外掛

WPFront User Role Editor可幫助您在WordPress站點中建立、編輯或刪除使用者角色和許可權。它的功能集類似於之前討論的外掛,但它有兩個突出的功能。

使用者遷移

管理儀表板中的螢幕並將屬於特定使用者角色的所有使用者遷移到另一個。您甚至可以為您的使用者分配次要角色。

如果您必須將站點上的大量使用者從一個角色遷移到另一個角色,此功能將非常方便。

WPFront User Role Editor中的“登入重定向”設定螢幕

WPFront User Role Editor中的“登入重定向”設定螢幕

WPFront User Role Editor的另一個有用功能是基於角色的登入重定向。例如,您可以在具有編輯角色的使用者登入後將其重定向到文章頁面。您還可以選擇阻止他們訪問/wp-admin頁面並檢視前端的工具欄。

Advanced Access Manager

“Advanced Access Manager”外掛

“Advanced Access Manager”外掛

Advanced Access Manager (AAM) 是一個功能強大的WordPress外掛,可讓您控制網站的幾乎所有方面。它包括200多個不同的功能,專為了解角色和許可權如何工作的高階WordPress使用者而設計。

與上面列出的外掛相比,AAM的功能要多得多。但由於這是一個以開發人員為中心的外掛,因此對於初學者或中級使用者來說並不容易使用。

Advanced Access Manager中的主儀表盤

Advanced Access Manager中的主儀表盤

您可以將AAM的主儀表盤分成四個不同的區域。我在上圖中對它們進行了編號,並在下面進行了概述。

  1. 最上面的區域提到了當前正在考慮的“主題”。在這裡,它是Role: Administrator,但它可以是特定使用者、匿名訪問者或每個人的預設設定。
  2. 主題下方的區域是主面板,您可以在其中進行所有設定,以管理對該主題的站點上各種事物的訪問。
  3. 第三個區域是Users/Roles Manager。使用其選項卡式圖示,您可以選擇要管理的內容。它是使用者角色、特定使用者、匿名訪問者還是每個人的預設訪問行為?
  4. 第四個區域可讓您管理AAM的設定、安裝其高階外掛並聯系支援人員。

Advanced Access Manager中的“設定”面板

Advanced Access Manager中的“設定”面板

AAM根據其行為和使用情況將其設定分為5組。

  • 服務設定列出了您可以啟用或禁用的所有AAM模組。通過有選擇地載入模組,您可以優化您的網站。
  • 核心設定區域允許您啟用或禁用某些AAM和WordPress的核心功能。
  • 內容設定與網站內容(例如文章、頁面、自定義文章型別)相關。
  • 安全設定部分包括AAM安全登入功能的設定。截至目前,只有兩種設定可用:Brute Force LockoutOne Session Per User
  • ConfigPress是一項有趣的功能,可讓您使用基於INI的程式碼更改AAM外掛的配置

Advanced Access Manager中的“附加元件”面板

Advanced Access Manager中的“附加元件”面板

AAM是一個面向開發人員的外掛,不僅限於使用者角色和許可權。它使您可以精細控制每個角色在您的網站上可以或不能做什麼。

為您的網站安裝“訪問策略”以確保其安全

為您的網站安裝“訪問策略”以確保其安全

您可以使用AAM為您的網站設定訪問和安全策略。它定義了哪個角色以及在什麼條件下可以訪問您網站上的各種資源。如果您想立即開始,您可以從AAM訪問策略中心安裝準備安裝的訪問策略。

用於新增前端登入表單的“AAM安全登入”小工具

用於新增前端登入表單的“AAM安全登入”小工具

AAM允許您建立臨時使用者帳戶和角色。這是一種與外部資源共享帳戶的安全方式。臨時使用者帳戶將在您設定的日期和時間後過期。對於臨時角色,使用者將在指定期限後被剝奪該角色。

本文無法涵蓋AAM的所有功能。您可以參考Advanced Access Manager的文件以瞭解有關其所有廣泛功能的更多資訊。

提示: User Access Manager是高階訪問管理器的一個不錯的替代品,儘管它的功能較少且不經常更新。

User Switching

WordPress外掛-“User Switching”

WordPress外掛-“User Switching”

User Switching允許您只需單擊一下即可在不同的WordPress使用者帳戶之間進行切換。如果您正在測試大量使用者角色和許可權,使用此外掛將幫助您節省大量時間。使用者切換使用WordPress的內建cookie身份驗證系統來記住您切換的帳戶,以便您可以立即切換回它們。

安裝並啟用外掛後,訪問儀表盤中的Users選單。您將看到每個使用者的Switch To連結。單擊此按鈕將切換到您想要的使用者。

單擊“Switch To”連結以切換到您想要的使用者

單擊“Switch To”連結以切換到您想要的使用者

您可以通過單擊儀表盤或使用者配置檔案螢幕中的Switch back to連結來切換回原始帳戶。

WordPress使用者切換

您還可以暫時Switch Off您的管理員帳戶,以檢視您的前端對訪問者的顯示方式。

只需單擊一下即可開啟和關閉您的帳戶

只需單擊一下即可開啟和關閉您的帳戶

作為一項安全措施,只有具有編輯使用者許可權的使用者才能切換使用者帳戶。預設情況下,只有管理員在WordPress單站點安裝中具有此許可權,而在多站點網路中,只有超級管理員具有此許可權。

為了進一步簡化使用者切換,您可以安裝Admin Bar User Switching擴充套件以使Switch to user連結出現在您的管理欄中。

將“Switch to user”連結新增到您的管理欄

將“Switch to user”連結新增到您的管理欄

View Admin As

WordPress外掛-“View Admin As”

WordPress外掛-“View Admin As”

View Admin As是一個高階使用者切換外掛,還包括角色和許可權管理器。與User Switching外掛不同,您無需安裝擴充套件程式即可將使用者切換選單新增到管理欄。預設情況下,View Admin As會將其所有主選單項新增到管理欄。

管理欄中的“View As”選單

管理欄中的“View As”選單

即使不存在具有這些角色的使用者,您也可以在現有使用者或角色之間切換(通過承擔他們的許可權)。單擊Site visitor連結將帶您到站點的前端,在那裡您可以作為普通使用者測試站點功能,而無需離開瀏覽器的選項卡。

View Admin As允許您臨時更改自己的許可權。由於它是以非破壞性方式完成的,因此您不會失去對主要功能的訪問許可權。

為當前使用者臨時自定義許可權

為當前使用者臨時自定義許可權

切換到使用者帳戶後,您可以直接從選單編輯他們的螢幕首選項和設定。您還可以分別在前端和後端切換語言/區域設定。

您不限於一種檢視型別,因為您可以組合各種選項並同時應用它們。

View Admin As附帶兩個可選模組,您可以根據需要啟用它們。

檢視管理員身份設定和可選模組

檢視管理員身份設定和可選模組

第一個模組新增了Role Defaults功能,可讓您為所有角色設定預設螢幕設定。您可以將這些預設設定應用於角色、單個使用者或未來的新使用者。

第二個模組啟用Role Manager功能。您使用此模組對角色和許可權所做的任何更改都是永久性的。與其他角色編輯器外掛不同,此模組將允許您通過自動將分配給使用者的角色遷移到另一個角色來刪除分配給使用者的角色。

您可以參考View Admin As文件以瞭解有關其廣泛功能的更多資訊。

小結

WordPress角色和許可權是使用者訪問管理背後的基本概念。它們可以幫助您控制您網站上的所有使用者可以執行的操作。許多外掛和主題也使用它們向WordPress核心新增非常有用的許可權。

WordPress有自己的一組角色和許可權,但如果您需要更大的靈活性,您可以自定義它們或建立自己的角色和許可權。您可以使用自己的程式碼或使用第三方外掛來執行此操作。

瞭解什麼是角色和許可權,並學習如何管理它們,是掌握WordPress的關鍵步驟。今天就開始使用它們吧!

評論留言