WordPress隐藏管理员导航栏代码失效问题求助
解决管理员导航栏隐藏失效的问题
原代码通过移除订阅者的read权限间接隐藏管理员导航栏,这种方法并不符合WordPress官方逻辑——管理员导航栏的显示与否,核心依赖show_admin_bar钩子及用户后台访问权限校验,而非单纯的read权限。WordPress版本更新后调整了权限校验逻辑,导致该方法失效。
以下是两种可靠的修改方案:
方案一:针对特定角色禁用导航栏
通过show_admin_bar钩子,精准判断用户角色后关闭导航栏显示:
function hide_admin_bar_for_subscribers() { if ( current_user_can( 'subscriber' ) ) { add_filter( 'show_admin_bar', '__return_false' ); } } add_action( 'init', 'hide_admin_bar_for_subscribers' );
如果需要给多个角色(比如订阅者、投稿者)隐藏导航栏,可修改判断逻辑:
function hide_admin_bar_for_selected_roles() { $current_user = wp_get_current_user(); // 定义需要隐藏导航栏的角色列表 $restricted_roles = array( 'subscriber', 'contributor' ); if ( array_intersect( $restricted_roles, $current_user->roles ) ) { add_filter( 'show_admin_bar', '__return_false' ); } } add_action( 'init', 'hide_admin_bar_for_selected_roles' );
方案二:全局隐藏非管理员的导航栏
如果需要给除管理员外的所有用户隐藏导航栏,可简化判断逻辑:
function hide_admin_bar_for_non_admins() { if ( ! current_user_can( 'manage_options' ) ) { add_filter( 'show_admin_bar', '__return_false' ); } } add_action( 'init', 'hide_admin_bar_for_non_admins' );
替换说明
删除你原来的remove_read_wpse_93843函数及对应的add_action代码,将上述任一方案的代码添加到主题的functions.php文件或自定义插件中即可。
内容的提问来源于stack exchange,提问作者DaveyBear
相关产品推荐
相关产品推荐

