You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止会员网站用户查看他人页面?权限异常问题求助

解决会员制网站用户查看他人页面的问题

嘿,这个问题我之前帮好几个做会员站的开发者搞定过,你之前的操作只是隐藏了后台的菜单选项,但没从数据查询层面做限制——当用户没有自己的页面时,系统默认会加载「全部」标签下的所有内容,这就绕开了你之前的菜单隐藏逻辑。下面给你几个落地的解决思路,组合起来用就能彻底解决问题:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:23:18