如何解决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
相关产品推荐
相关产品推荐

