不同的用戶,不同的權(quán)限-WordPress開發(fā)

    清楚的了解不同的權(quán)限之間的聯(lián)系,是很有必要的,這一篇wordpress權(quán)限的文章來(lái)源于官方文檔,值得參考

    在wordpress主題開發(fā)和日常使用過(guò)程中,清楚的了解不同的權(quán)限之間的聯(lián)系,是很有必要的,這一篇wordpress權(quán)限的文章來(lái)源于官方文檔,值得參考。

    描述

    WordPress使用角色概念,旨在讓網(wǎng)站所有者能夠控制用戶在網(wǎng)站內(nèi)可以做什么和不可以做什么。站點(diǎn)所有者可以通過(guò)為每個(gè)用戶分配特定角色來(lái)管理用戶對(duì)諸如撰寫和編輯帖子,創(chuàng)建頁(yè)面,定義鏈接,創(chuàng)建類別,審核評(píng)論,管理插件,管理主題以及管理其他用戶等任務(wù)的訪問(wèn)權(quán)限。

    WordPress有六個(gè)預(yù)定義的角色:超級(jí)管理員管理員編輯作者貢獻(xiàn)者訂閱者。允許每個(gè)角色執(zhí)行一組稱為“?功能”的任務(wù)。有許多功能,包括“?publish_posts?”,“?moderate_comments?”和“?edit_users?”。為每個(gè)角色預(yù)先分配了一組默認(rèn)功能,但可以使用add_cap()和?remove_cap()函數(shù)分配或刪除其他功能。可以使用add_role()引入或刪除新角色和remove_role()函數(shù)。

    在超級(jí)管理員角色允許用戶執(zhí)行所有可能的功能。每個(gè)其他角色的允許功能數(shù)量都在減少。例如,訂閱者角色只具有“?讀取?”功能。不應(yīng)將一個(gè)特定角色視為另一個(gè)角色的高級(jí)角色。相反,請(qǐng)考慮角色定義用戶在站點(diǎn)內(nèi)的職責(zé)。

    WordPress 的角色和權(quán)限系統(tǒng)比用戶等級(jí)的方法靈活得多,它支持對(duì)現(xiàn)有用戶角色添加,刪除和重新分配權(quán)限,甚至還可以添加更多的用戶角色,并且不破壞系統(tǒng)原有內(nèi)置的用戶角色。

    使用權(quán)限系統(tǒng),就不必去擔(dān)心 WordPress 不再支持用戶等級(jí)系統(tǒng),并且如果想添加和使用自定義的權(quán)限,也只能使用權(quán)限系統(tǒng)。

    角色摘要

    • 超級(jí)管理員?- 有權(quán)訪問(wèn)網(wǎng)站管理功能和所有其他功能的人。請(qǐng)參閱創(chuàng)建網(wǎng)絡(luò)文章。
    • 管理員slug:'administrator') - 有權(quán)訪問(wèn)單個(gè)站點(diǎn)中的所有管理功能的人。
    • 編輯slug:'編輯') - 可以發(fā)布和管理帖子的人,包括其他用戶的帖子。
    • 作者slug:'author') - 可以發(fā)布和管理自己帖子的人。
    • 貢獻(xiàn)者slug:'貢獻(xiàn)者') - 可以編寫和管理自己的帖子但無(wú)法發(fā)布它們的人。
    • 訂閱者slug:'subscriber') - 只能管理其個(gè)人資料的人。

    安裝WordPress后,將自動(dòng)創(chuàng)建管理員帳戶。

    可以在“?管理面板”?>?“設(shè)置”?>“?常規(guī)”中設(shè)置新用戶的默認(rèn)角色。

    您可以通過(guò)訪問(wèn)全局WP_Roles對(duì)象的role_names屬性(可以使用wp_roles()檢索,或者在版本4.3之前使用全局$ wp_roles;)來(lái)查看所有已定義角色的列表。

    角色

    角色定義允許用戶分配角色的一組任務(wù)。例如,超級(jí)管理員角色包括能夠在內(nèi)部進(jìn)行一切可能的任務(wù),網(wǎng)絡(luò)虛擬的WordPress?網(wǎng)站。該管理員角色限制所允許的任務(wù),只有那些影響一個(gè)站點(diǎn)。另一方面,Author角色只允許執(zhí)行一小部分任務(wù)。


    來(lái)源于:

    https://www.solagirl.net/wordpress-get-current-user-role.html

    過(guò)去判斷登錄用戶的角色我喜歡用current_user_can(),比如判斷當(dāng)前用戶是否是作者用current_user_can('author'),記得WordPress官方文檔中給的例子也是這樣用,不過(guò)今天看了一下文檔,貌似用法變了,傳遞角色作為參數(shù)不再可靠,正確的用法是傳遞$capability,那么該如何判斷用戶角色呢?

    注:以下內(nèi)容在WP 3.4+上測(cè)試通過(guò)

    current_user_can()的正確用法

    current_user_can()文檔中有一句話要注意一下

    Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly.

    意思是說(shuō)傳遞用戶角色名稱(如author、contributor)作為參數(shù)不能100%保證返回正確的結(jié)果,正確的用法是傳遞$capability,從這個(gè)函數(shù)的表面意思看,參數(shù)是權(quán)限比參數(shù)是角色名稱更靠譜。

    所以,要根據(jù)不同角色擁有的權(quán)限來(lái)判斷用戶角色,用戶權(quán)限可以在Roles and Capabilities中找到。

    判斷用戶是否為管理員(Administrator)

    if( current_user_can(?'manage_options'?) ) {
    ????echo?'The current user is a administrator';?
    }
    

    判斷用戶是否為編輯(Editor)

    if( current_user_can(?'publish_pages'?) && !current_user_can(?'manage_options'?) ) {
    ????echo?'The current user is an editor';?
    }
    

    判斷用戶是否為作者(Author)

    if( current_user_can(?'publish_posts'?) && !current_user_can(?'publish_pages'?) ) {
    ????echo?'The current user is an author';?
    }
    

    判斷用戶是否為投稿者(Contributor)

    if( current_user_can(?'edit_posts'?) && !current_user_can(?'publish_posts'?) ) {
    ????echo?'The current user is a contributor';?
    }
    

    判斷用戶是否為訂閱者(Subscriber)

    if( current_user_can(?'read'?) && !current_user_can(?'edit_posts'?) ) {
    ????echo?'The current user is a subscriber';?
    }
    

    用$current_user判斷

    $current_user是WordPress的一個(gè)全局變量,當(dāng)用戶登錄后,這個(gè)里面就會(huì)有用戶的角色和權(quán)限信息。

    當(dāng)WordPress的init action執(zhí)行后,就可以安全的使用$current_user全局變量了。

    在模板文件中判斷登錄用戶是否為作者(Author)

    global?$current_user;
    if(?$current_user->roles[0] ==?'author'?) {
    ????echo?'The current user is an author';
    }
    

    在functions.php中判斷用戶是否為作者(Author)

    add_action(?'init',?'check_user_role'?);
    ?
    function?check_user_role() {
    ????global?$current_user;
    ????if(?$current_user->roles[0] ==?'author'?) {
    ????????echo?'The current user is an author';
    ????}
    }
    

    之所以要使用

    add_action(?'init',?'check_user_role'?);
    

    是因?yàn)?current_user這個(gè)全部變量到init action執(zhí)行時(shí)才完成賦值,既然要讀它的內(nèi)容,至少要等到它的內(nèi)容準(zhǔn)備好后再讀取。functions.php的代碼先與init action執(zhí)行,所以在functions.php中直接寫global $current_user是無(wú)法獲取用戶信息的。詳細(xì)信息可以參考《WordPress Actions加載順序》。

    檢查用戶角色之前,還可以先檢查一下用戶是否登錄

    ??????if( is_user_logged_in() ) {
    ??????????//用戶已登錄,檢查用戶角色
    ??????}
    ?>
    

    author_can(),可以用來(lái)檢查某個(gè)文章的作者是否具有一定的權(quán)限:

    if ( author_can( $post, $capability ) ) {
    // 如果文章 $post 的作者擁有 $capability 時(shí)執(zhí)行的動(dòng)作
    }
    ?

    函數(shù)?author_can?第一個(gè)參數(shù)可以是一個(gè) $post 對(duì)象,或一個(gè) Post ID。

    更簡(jiǎn)單的方法

    還有一種更直接的方法,例如判斷當(dāng)前用戶是否為管理員

    global $current_user;
    if(in_array(?'administrator', $current_user->roles )){
    ????echo?'administrator'
    

    你好,請(qǐng)問(wèn)判斷用戶登錄后再提供下載鏈接,這樣如何操作?

    if?( is_user_logged_in() ) {
    ????echo?'登陸用戶';
    }?else?{
    ????echo?'未登錄用戶!';
    }
    

    WordPress判斷用戶等級(jí)顯示相應(yīng)內(nèi)容

    實(shí)現(xiàn)方法

     if( !current_user_can('administrator') ) {
    echo '這段文字在非管理員角色才會(huì)顯示,因?yàn)榕袛嗪瘮?shù)前加了感嘆號(hào)。';
    }?>
    

    判斷是否管理員

     if( current_user_can('administrator') ) {
    echo '這段文字只會(huì)在“管理員”角色登錄后顯示。';
    }?>
    

    判斷是否編輯

     if( current_user_can('editor') ) {
    echo '這段文字只會(huì)在“編輯”角色登錄后顯示。';
    }?>
    

    判斷是否作者

     if( current_user_can('author') ) {
    echo '這段文字只會(huì)在“作者”角色登錄后顯示。';
    }?>
    

    判斷是否投稿者

     if( current_user_can('contributor') ) {
    echo '這段文字只會(huì)在“投稿者”角色登錄后顯示。';
    }?>
    

    判斷是否訂閱者

     if( current_user_can('subscriber') ) {
    echo '這段文字只會(huì)在“訂閱者”角色登錄后顯示。';
    }?>
    

    根據(jù)權(quán)限判斷角色

    有些時(shí)候因?yàn)槟承┰蛴脩艚巧珯?quán)限會(huì)被修改,所以這個(gè)時(shí)候再用以上代碼直接判斷用戶角色可能就實(shí)現(xiàn)不到我們想要的功能了,但我們還可以通過(guò)區(qū)分權(quán)限來(lái)區(qū)分角色。

    if( current_user_can( ‘manage_options’ ) )
    { echo ‘這段文字只會(huì)在“管理員”角色登錄后顯示。’; }
    if( current_user_can( ‘publish_pages’ ) && !current_user_can( ‘manage_options’ ) )
    { echo ‘這段文字只會(huì)在“編輯”角色登錄后顯示。’; }
    if( current_user_can( ‘publish_posts’ ) && !current_user_can( ‘publish_pages’ ) )
    { echo ‘這段文字只會(huì)在“作者”角色登錄后顯示。’; }
    if( current_user_can( ‘edit_posts’ ) && !current_user_can( ‘publish_posts’ ) )
    { echo ‘這段文字只會(huì)在“投稿者”角色登錄后顯示。’; }
    if( current_user_can( ‘read’ ) && !current_user_can( ‘edit_posts’ ) )
    { echo ‘這段文字只會(huì)在“訂閱者”角色登錄后顯示。’; }
    ?>
    

    WordPress 會(huì)員等級(jí)

    首先先來(lái)了解WordPress會(huì)員的等級(jí)區(qū)分:

    管理者:Administrator: level 10

    編輯:Editor: Level 7

    作者:Author: Level 4

    撰寫人員:Contributor: Level 2

    訂閱者:Subscriber: Level 0

    一般訪客(非會(huì)員): Level 在 0 以下

    以下將使用官方提供的函數(shù): current_user_can 來(lái)做會(huì)員等級(jí)區(qū)分.

    僅允許管理員可瀏覽

     global $user_ID; if( $user_ID ) : ?>if( current_user_can('level_10') ) : ?>
    

    這里顯示的內(nèi)容為管理員可以看到的.

     endif; ?>endif; ?>
    

    依照會(huì)員等級(jí)顯示不同的內(nèi)容

     if (current_user_can('level_10')) : ?>
    

    管理員可看到

     elseif (current_user_can('level_7')) : ?>
    

    編輯可看到

     elseif (current_user_can('level_4')) : ?>
    

    作者可看到

     elseif (current_user_can('level_2')) : ->
    

    撰寫者可看到

     elseif (current_user_can('level_0')) : ?>
    

    訂閱者可看到

     else : ?-->
    

    一般非會(huì)員(未登入者)可看到

     endif; ?-->
    

    用戶權(quán)限和后臺(tái)菜單

    很多插件都都會(huì)在 WordPress 后臺(tái)添加一個(gè)管理頁(yè)面,讓用戶自定義插件選項(xiàng),一般我們可以通過(guò)下面的函數(shù)實(shí)現(xiàn):

    // 添加主菜單
    add_menu_page(page_title, menu_title, capability, handle, [function], [icon_url]);
    
    // 添加子菜單
    add_submenu_page(parent, page_title, menu_title, capability, file/handle, [function]);
    
    //添加選項(xiàng)菜單子菜單
    add_options_page(page_title, menu_title, capability, handle, [function]);
    
    //添加工具菜單子菜單
    add_management_page(page_title, menu_title, capability, handle, [function]);
    
    //添加頁(yè)面菜單子菜單
    add_pages_page( page_title, menu_title, capability, handle, [function]);
    
    //添加文章菜單子菜單
    add_posts_page( page_title, menu_title, capability, handle, [function]);
    
    //添加主題菜單子菜單
    add_theme_page( page_title, menu_title, capability, handle, [function]);

    我們很容易發(fā)現(xiàn),這些函數(shù)都會(huì)有個(gè)參數(shù):capability,這個(gè)參數(shù)就是用來(lái)指定用戶看到該菜單所需要的權(quán)限。一般它的值是一個(gè)代表某種權(quán)限的字符串,比如:edit_posts。所以使用這些額函數(shù)在 WordPress 后臺(tái)中添加的菜單以及與這些菜單相關(guān)聯(lián)的頁(yè)面,是只有擁有指定的權(quán)限的用戶才可以看到和訪問(wèn)的。

    如果你的主題或者插件有設(shè)置頁(yè)面,應(yīng)該正確的控制哪些用戶有權(quán)限可以訪問(wèn)這些頁(yè)面,比如,添加的是一個(gè)主題選項(xiàng)頁(yè)面,就應(yīng)該使用?edit_themes?權(quán)限,而添加的是一個(gè)插件選項(xiàng)頁(yè)面的話,使用的應(yīng)該是?edit_plugins?權(quán)限,當(dāng)然也可以直接?manage_options?權(quán)限來(lái)控制訪問(wèn)插件和主題選項(xiàng)頁(yè)面。

    顯示不同權(quán)限的用戶

    在數(shù)據(jù)庫(kù)中,關(guān)于權(quán)限的字段位于數(shù)據(jù)庫(kù)中 wp_usermeta 表中的 meta_value,所以這個(gè)判斷函數(shù)可以這么寫:

    //以下為代碼正文…
       
    global $wpdb;
    //顯示管理員
    $administrators = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value = 10 ORDER BY user_id");
    //顯示管理員、編輯
    $editors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 7 ORDER BY user_id");
    //顯示管理員、編輯、作者
    $authors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 2 ORDER BY user_id");
    //顯示管理員、編輯、作者、投稿者
    $contributors = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 1 ORDER BY user_id");
    //顯示管理員、編輯、作者、投稿者、訂閱者
    $subscribers = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= 0 ORDER BY user_id");
    //歷遍顯示輸出所有相關(guān)用戶的顯示名稱
    foreach($administrators as $administrator){
        echo get_the_author_meta('display_name', $administrator).'
    ';
    }
    ?>
    

    以上示例中只輸出權(quán)限最高的管理員用戶,大家都自己發(fā)揮吧!注釋都寫明了相關(guān)的權(quán)限和角色。

    相關(guān)推薦

    不同的用戶,不同的權(quán)限-WordPress開發(fā)-Npcink
    不同的用戶,不同的權(quán)限-WordPress開發(fā)-Npcink

    前臺(tái)顯示編輯鏈接-WordPress主題開發(fā)

    不同的用戶,不同的權(quán)限-WordPress開發(fā)-Npcink
    不同的用戶,不同的權(quán)限-WordPress開發(fā)-Npcink

    怎么添加自定義角色和權(quán)限? - wordpress開發(fā)

    國(guó)內(nèi)主題

    Orange - WordPress輕擬物風(fēng)企業(yè)主題

    2023-4-26 22:20:20

    怎么調(diào)用隨機(jī)縮略圖? - wordpress開發(fā)

    2020-7-20 16:45:38

    ??
    Npcink上的部份代碼及教程來(lái)源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無(wú)意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    0 條回復(fù) A文章作者 M管理員
      暫無(wú)討論,說(shuō)說(shuō)你的看法吧
    ?
    個(gè)人中心
    購(gòu)物車
    優(yōu)惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 国产免费一区二区三区免费视频| 亚洲国产一区二区视频网站| 黑人一区二区三区中文字幕| 国偷自产视频一区二区久| 国产伦精品一区二区三区女| 精品天海翼一区二区| 一区二区三区波多野结衣| 久久se精品一区精品二区国产| 人妻无码一区二区三区| 手机看片一区二区| 亚洲av综合av一区二区三区| 伊人色综合网一区二区三区| 精品日韩亚洲AV无码一区二区三区| 亚洲无线码一区二区三区| 一区二区三区国产| 久久se精品一区二区国产| 蜜桃传媒视频麻豆第一区| 亚洲国产成人一区二区精品区 | 亚欧在线精品免费观看一区| 色偷偷av一区二区三区| 日韩亚洲AV无码一区二区不卡 | 日韩精品无码中文字幕一区二区| 国产一区二区在线视频| 一区二区免费在线观看| 亚洲香蕉久久一区二区| 国产一区二区在线视频播放| 亚洲av鲁丝一区二区三区| 亚洲国产精品一区二区久| 国产成人av一区二区三区不卡| www一区二区三区| 国产a∨精品一区二区三区不卡| 国产一区二区在线观看| 久久成人国产精品一区二区| 人妻视频一区二区三区免费| av无码一区二区三区| 久久99精品国产一区二区三区 | 国产一区二区久久久| 国产在线精品观看一区| 亚洲一区二区久久| 日韩精品无码久久一区二区三| 无码人妻精品一区二区三区东京热|