如何禁止会员网站用户查看他人页面?权限异常问题求助
解决会员制网站用户查看他人页面的问题
嘿,这个问题我之前帮好几个做会员站的开发者搞定过,你之前的操作只是隐藏了后台的菜单选项,但没从数据查询层面做限制——当用户没有自己的页面时,系统默认会加载「全部」标签下的所有内容,这就绕开了你之前的菜单隐藏逻辑。下面给你几个落地的解决思路,组合起来用就能彻底解决问题:
1. 从查询根源限制:强制只加载当前用户的页面
这个方法是最核心的,不管用户有没有自己的页面,后台页面列表只会显示当前用户创建的内容,直接从数据库查询层面切断了访问他人页面的可能。把这段代码加到你的functions.php里:
add_action('pre_get_posts', 'restrict_pages_to_current_user'); function restrict_pages_to_current_user($query) { // 仅在后台页面管理列表生效,且排除管理员(管理员需要查看所有页面) if (is_admin() && $query->is_main_query() && !current_user_can('manage_options')) { $current_screen = get_current_screen(); // 确认当前是页面管理页面(edit.php?post_type=page) if ($current_screen->post_type === 'page') { // 强制查询当前用户的页面 $query->set('author', get_current_user_id()); } } return $query; }
2. 移除「全部」标签:彻底关闭入口
配合你之前的菜单隐藏操作,把「全部」这个选项也删掉,让用户根本看不到这个入口。添加这段代码:
add_filter('views_edit-page', 'remove_all_pages_view_for_non_admins'); function remove_all_pages_view_for_non_admins($views) { // 管理员保留所有视图,普通用户移除「全部」选项 if (!current_user_can('manage_options')) { unset($views['all']); } return $views; }
3. 优化空状态体验:引导用户创建页面
当用户没有自己的页面时,替换默认的空列表提示,给用户明确的引导,提升体验:
add_action('admin_notices', 'custom_empty_pages_notice'); function custom_empty_pages_notice() { $current_screen = get_current_screen(); // 仅在页面管理页面生效,排除管理员,且用户无页面时显示 if ($current_screen->post_type === 'page' && !current_user_can('manage_options')) { $user_has_pages = get_posts(array( 'post_type' => 'page', 'author' => get_current_user_id(), 'posts_per_page' => 1 )); if (empty($user_has_pages)) { echo '<div class="notice notice-info is-dismissible">'; echo '<p>你还没有创建专属页面,<a href="' . admin_url('post-new.php?post_type=page') . '">点击这里创建第一个页面</a>吧!</p>'; echo '</div>'; } } }
最终建议
优先组合使用前两个方法,这样既从数据层面锁死了用户只能看自己的页面,又从UI层面移除了可能的入口,双重保险。第三个方法是体验优化,可选添加。
记得修改functions.php前先备份文件,避免出错导致网站无法访问~
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

