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

如何在WordPress后台按页面slug对非管理员隐藏指定页面

原代码问题
  1. CSS语法不合法:不存在slug ==> 'xxx'这种CSS选择器规则,浏览器无法识别该写法,所以样式不会生效。
  2. 隐藏逻辑不严谨:仅通过CSS隐藏属于前端屏蔽,非管理员用户只要知道页面编辑的直接URL,仍然可以进入页面修改内容,安全性不足。
  3. 权限判断不合理:直接判断用户名是否为admin不够通用,修改管理员用户名后规则就会失效,推荐用WordPress原生权限校验判断。
最优解决方案

通过WordPress原生查询钩子从后端过滤页面,从根源上隐藏指定slug的页面,代码添加到主题functions.php文件即可生效:

add_action('pre_get_posts', 'hide_specified_pages_for_non_admin');
function hide_specified_pages_for_non_admin($query) {
    // 仅在后台页面列表的主查询中生效
    if (is_admin() && $query->is_main_query() && get_current_screen()->id === 'edit-page') {
        $current_user = wp_get_current_user();
        // 判断用户是否没有管理员权限,可根据需求调整权限规则
        if (!user_can($current_user, 'manage_options')) {
            // 填入需要隐藏的页面slug
            $hidden_slugs = ['products', 'policy', 'services'];
            $query->set('post_name__not_in', $hidden_slugs);
        }
    }
}

// 额外防护:禁止非管理员直接通过URL访问隐藏页面的编辑页
add_action('current_screen', 'block_hidden_page_edit_for_non_admin');
function block_hidden_page_edit_for_non_admin() {
    $screen = get_current_screen();
    if (is_admin() && $screen->id === 'page' && !$screen->action === 'add') {
        global $post;
        if (!$post) return;
        $current_user = wp_get_current_user();
        if (!user_can($current_user, 'manage_options')) {
            $hidden_slugs = ['products', 'policy', 'services'];
            if (in_array($post->post_name, $hidden_slugs)) {
                wp_redirect(admin_url('edit.php?post_type=page'));
                exit;
            }
        }
    }
}

该方案完全通过slug匹配页面,不需要手动查询页面ID,适配主题自动部署的需求,同时从后端层面做了双重校验,安全性更高。

简化CSS方案(不推荐)

如果仅需要前端列表隐藏,不需要严格的权限控制,可以用修正后的CSS方案:

add_action('admin_head', 'hide_posts_pages_by_css');
function hide_posts_pages_by_css() {
    $current_user = wp_get_current_user();
    if (!user_can($current_user, 'manage_options')) {
        ?>
        <style>
            .post-type-page.post-products,
            .post-type-page.post-policy,
            .post-type-page.post-services {
                display: none;
            }
        </style>
        <?php
    }
}

内容的提问来源于stack exchange,提问作者ShrockCo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:24:03