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)下圖界面:

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

解決方案
最終處理方式:非管理員用戶登錄后,不能讓他訪問(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)題在下面留言。




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