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

在WordPress中输出<style>为何触发‘Cannot modify header information’错误?

解决WordPress后台「Cannot modify header information」错误

嘿,这个错误我太熟了!问题出在你选的钩子和输出方式上——你在admin_init里直接echo样式代码,可这个钩子是在WordPress发送HTTP响应头的阶段触发的,这时候直接输出内容会打乱头信息的发送顺序,自然就报错了。

给你两个靠谱的修正方案:

方案一:用正确的钩子输出CSS样式

把输出逻辑移到admin_head钩子(这是WordPress专门给后台头部内容预留的钩子,完全不会触发头信息冲突),同时修正权限判断的小问题(current_user_can('admin')不是WordPress的标准写法哦):

add_action('admin_head', 'wpse74389_hide_admin_menu_items');
function wpse74389_hide_admin_menu_items(){
    $user = wp_get_current_user();
    // 检查当前用户是否是管理员角色
    if (in_array('administrator', $user->roles)) {
        ?>
        <style>
            li#menu-settings .wp-submenu.wp-submenu-wrap li:last-child,
            li#menu-settings .wp-submenu.wp-submenu-wrap li:nth-child(2) {
                display: none !important;
            }
        </style>
        <?php
    }
}

方案二:直接移除子菜单(更优雅彻底)

如果不想用CSS隐藏,还可以直接从后台菜单结构里删掉这些子项,这样用户连URL访问的机会都没有,比CSS更靠谱:

add_action('admin_menu', 'wpse74389_remove_submenu_items');
function wpse74389_remove_submenu_items(){
    // 用manage_options权限判断,管理员默认拥有这个权限
    if (current_user_can('manage_options')) {
        // 第一个参数是父菜单的slug,第二个是子菜单的slug
        // 替换成你要隐藏的子项对应的slug就行
        remove_submenu_page('options-general.php', 'options-writing.php');
        remove_submenu_page('options-general.php', 'options-discussion.php');
    }
}

补充说明

  • 权限判断那块,你之前写的current_user_can('admin')不对,WordPress里没有这个权限标识,要么检查角色administrator,要么用管理员专属权限manage_options。
  • 方案一的CSS写法我也调整了,用PHP闭合标签直接输出HTML,比转义后的echo更易读,也不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:42:25