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

如何解决WordPress自定义用户角色移除admin bar节点失效问题

WordPress自定义角色Admin Bar功能调整与后台访问限制方案

1. 修复Admin Bar节点移除对自定义角色无效问题

原代码失效核心原因有两点:

  • 角色判断逻辑未引入$current_user全局变量,无法正确获取当前登录用户信息
  • $wp_admin_bar对象的节点移除统一使用remove_node方法即可,混用remove_menu会导致部分节点删除失败

修复后的完整代码如下:

add_action( 'admin_bar_menu', 'remove_wp_nodes', 999 );
function remove_wp_nodes() {
    global $wp_admin_bar, $current_user;
    // 仅对gamer角色执行节点移除,如需对所有非管理员生效可调整判断条件
    if ( user_can( $current_user, 'gamer' ) ) {
        $wp_admin_bar->remove_node( 'new-post' );
        $wp_admin_bar->remove_node( 'new-link' );
        $wp_admin_bar->remove_node( 'new-media' );
        $wp_admin_bar->remove_node( 'comments' );
        $wp_admin_bar->remove_node( 'new-content' );
        $wp_admin_bar->remove_node( 'new-page' );
        $wp_admin_bar->remove_node( 'new-gry' );
        $wp_admin_bar->remove_node( 'site-name' );
    }
}

2. 实现gamer角色禁止访问指定后台页面

通过admin_init钩子挂载访问拦截逻辑,可自定义需要拦截的后台路径,示例代码如下:

add_action( 'admin_init', 'block_gamer_access_sensitive_pages' );
function block_gamer_access_sensitive_pages() {
    global $current_user;
    // 仅拦截gamer角色
    if ( user_can( $current_user, 'gamer' ) ) {
        // 定义需要拦截的后台页面路径,可按需新增
        $blocked_pages = [
            '/wp-admin/edit-comments.php',
            // 可继续添加其他需要拦截的路径,例如 '/wp-admin/edit.php' 等
        ];
        $current_path = $_SERVER['REQUEST_URI'];
        foreach ( $blocked_pages as $page ) {
            if ( strpos( $current_path, $page ) !== false ) {
                // 拦截后可重定向到前台首页,或者自定义无权限提示页面
                wp_redirect( home_url() );
                exit;
            }
        }
    }
}

将以上两段代码添加到主题的functions.php文件或者自定义功能插件中即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:15:03