禁止非管理員用戶訪問(wèn)WP后臺(tái)

  1. 主頁(yè)
  2. 文檔
  3. B2主題使用教程
  4. B2主題二開
  5. 禁止非管理員用戶訪問(wèn)WP后臺(tái)

B2主題為用戶提供的前端用戶中心,但是當(dāng)某些用戶試圖訪問(wèn)WP后臺(tái)的時(shí)候,會(huì)出現(xiàn)以下兩種情況,用戶體驗(yàn)不佳。

1、訪問(wèn) 域名/wp-admin/ 后,使用非管理員登錄后,會(huì)被自動(dòng)重定向到 域名/wp-admin/profile.php,出現(xiàn)下圖界面:

禁止非管理員用戶訪問(wèn)WP后臺(tái) - 非管理員登錄后顯示該頁(yè)面
非管理員登錄后顯示該頁(yè)面

2、在上一步登錄以后,刪除后面的 profile.php,直接訪問(wèn) 域名/wp-admin/,會(huì)看到如下界面:

禁止非管理員用戶訪問(wèn)WP后臺(tái) - 直接訪問(wèn)wp-admin的界面
直接訪問(wèn)wp-admin的界面

解決方案

最終處理方式:非管理員用戶登錄后,不能讓他訪問(wèn)wp-admin頁(yè)面,同時(shí)重定向他返回前端用戶中心的個(gè)人設(shè)置頁(yè)面。所用代碼如下:

/**
 * 禁止非管理員(或低于特定角色)的用戶訪問(wèn)wp-admin
 * http://www.ydqwiac.cn/docs/b2/b2-dev/stop-access-admin
 */
function b2child_child_stop_access_admin() {
    
    //預(yù)留鉤子配置可訪問(wèn)后臺(tái)的用戶能力 https://wordpress.org/support/article/roles-and-capabilities/
    $capability = apply_filters( 'b2_admin_capability', 'manage_options' );  //默認(rèn)管理員
    
    if ( is_admin() && ! current_user_can( $capability ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
        
        $user_id = get_current_user_id();
        
        if( $user_id ) {
            
            $redirect = get_author_posts_url($user_id); // 獲取前端個(gè)人中心頁(yè)面
            
            global $pagenow;
            if( $pagenow =='profile.php' || $pagenow =='user-edit.php' ) {
                $redirect = esc_url( $redirect.'/settings' ); //獲取前端個(gè)人資料設(shè)置頁(yè)面
            }
            
            wp_logout(); //自動(dòng)注銷當(dāng)前用戶在WP后臺(tái)的登錄狀態(tài)
            wp_safe_redirect( $redirect ); // 將用戶重定向到正確的頁(yè)面
            exit;
        }
        
    }
}
add_action( 'admin_menu', 'b2child_child_stop_access_admin' );

以上代碼已提交給春哥,后續(xù)版本添加。

自定義受限的用戶角色

默認(rèn)是沒(méi)有 manage_options 能力的用戶(即非管理員)會(huì)受限,我們也預(yù)留了過(guò)濾鉤子b2_admin_capability,允許自定義用戶能力,比如想讓 編輯 不受限,參考代碼如下:

/**
 * 自定義訪問(wèn)后臺(tái)的角色能力
 * http://www.ydqwiac.cn/docs/b2/b2-dev/stop-access-admin
 */
add_filter( 'b2_admin_capability', function () {
    //用戶能力查看 https://wordpress.org/support/article/roles-and-capabilities/
    return 'manage_categories'; //修改這個(gè)用戶能力,這里的角色為 編輯
} );

好了,教程到此結(jié)束,有什么問(wèn)題在下面留言。

這篇文章對(duì)您有用嗎? 20 2
3 條回復(fù) A文章作者 M管理員
  1. 8090安全門戶

    這個(gè)很恐怖啊,剛剛試了下普通訂閱者能夠直接訪問(wèn)圖庫(kù)所有文件,還能上傳。春哥目前還沒(méi)集成,這個(gè)解決方案的代碼要添加在哪個(gè)文件里呢?求倡萌老哥解答?

?
個(gè)人中心
購(gòu)物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

织金县| 辽源市| 福建省| 凤山县| 得荣县| 松桃| 永定县| 哈尔滨市| 水城县| 灵川县| 通榆县| 长顺县| 皮山县| 会宁县| 沈阳市| 元氏县| 盐津县| 墨竹工卡县| 周至县| 石屏县| 习水县| 广丰县| 夏津县| 鄄城县| 泰和县| 吉林市| 西丰县| 成安县| 塔城市| 日土县| 从化市| 松阳县| 小金县| 远安县| 赣榆县| 游戏| 铜川市| 开平市| 常州市| 东乡| 汶川县|