电话
13363039260
B2主题为用户提供的前端用户中心,但是当某些用户试图访问WP后台的时候,会出现以下两种情况,用户体验不佳。
1、访问 域名/wp-admin/
后,使用非管理员登录后,会被自动重定向到 域名/wp-admin/profile.php
,出现下图界面:
非管理员登录后显示该页面
2、在上一步登录以后,删除后面的 profile.php,直接访问 域名/wp-admin/
,会看到如下界面:
直接访问wp-admin的界面
最终处理方式:非管理员用户登录后,不能让他访问wp-admin页面,同时重定向他返回前端用户中心的个人设置页面。所用代码如下:
/** * 禁止非管理员(或低于特定角色)的用户访问wp-admin * https://www.wpdaxue.com/docs/b2/b2-dev/stop-access-admin */function b2child_child_stop_access_admin() { //预留钩子配置可访问后台的用户能力 https://wordpress.org/support/article/roles-and-capabilities/ $capability = apply_filters( 'b2_admin_capability', 'manage_options' ); //默认管理员 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); // 获取前端个人中心页面 global $pagenow; if( $pagenow =='profile.php' || $pagenow =='user-edit.php' ) { $redirect = esc_url( $redirect.'/settings' ); //获取前端个人资料设置页面 } wp_logout(); //自动注销当前用户在WP后台的登录状态 wp_safe_redirect( $redirect ); // 将用户重定向到正确的页面 exit; } }}add_action( 'admin_menu', 'b2child_child_stop_access_admin' );
默认是没有 manage_options
能力的用户(即非管理员)会受限,我们也预留了过滤钩子b2_admin_capability
,允许自定义用户能力,比如想让 编辑 不受限,参考代码如下:
/** * 自定义访问后台的角色能力 * https://www.wpdaxue.com/docs/b2/b2-dev/stop-access-admin */add_filter( 'b2_admin_capability', function () { //用户能力查看 https://wordpress.org/support/article/roles-and-capabilities/ return 'manage_categories'; //修改这个用户能力,这里的角色为 编辑} );