排查WordPress中Cannot modify header information报错问题
排查WordPress "Cannot modify header information" 报错及解决方法
问题现象
- 触发报错:
Warning: Cannot modify header information - headers already sent by (output started at ~ wp-content/plugins/insert-headers-and-footers/includes/class-wpcode-snippet-execute.php(292) : eval()'d code:4) - 实际影响:部分文章页面崩溃,出现页眉页脚重复调用的异常显示
报错核心原因
这个报错的本质是HTTP头发送时机冲突:WordPress要求所有HTTP头(比如跳转、缓存控制)必须在任何页面内容输出之前发送。一旦有内容(哪怕是一个空格、换行、PHP错误信息)提前输出到浏览器,后续再发送HTTP头就会触发该警告。
报错指向WP Code Snippets插件的class-wpcode-snippet-execute.php第292行的eval( $code );,说明是通过该插件添加的自定义代码片段输出了内容,导致了冲突。
自定义文章类型代码的问题
添加的自定义文章类型代码存在多处语法错误,直接导致PHP输出错误信息,触发了页眉冲突:
- 提前调用
register_post_type:函数开头就执行register_post_type( ' modality_post', $args);,此时$args还未定义,PHP会抛出错误并输出到页面 - 无效的数组包裹写法:用
array()把$supports、$labels、$args的赋值包裹起来,这是完全错误的语法,会直接引发解析错误 - 重复注册自定义文章类型:函数末尾再次调用
register_post_type,即使前面的错误修复,重复注册也会引发异常 - 参数含多余空格:自定义文章类型的slug
' modality_post'前面有空格,会导致URL和查询逻辑异常
修复后的正确代码
替换原自定义代码为以下版本:
// 自定义文章类型函数 function create_posttype_06() { // 支持的功能项 $supports = array( 'title', // 文章标题 'editor', // 内容编辑器 'author', // 文章作者 'thumbnail', // 特色图片 'excerpt', // 文章摘要 'custom-fields',// 自定义字段 'comments', // 评论功能 'revisions', // 版本修订 'post-formats', // 文章格式 'categories', // 分类 'tags' // 标签 ); // 后台显示的标签文本 $labels = array( 'name' => _x('Modality Post', 'plural'), 'singular_name' => _x('Modality Post', 'singular'), 'menu_name' => _x('Modality Post', 'admin menu'), 'name_admin_bar' => _x('Modality Post', 'admin bar'), 'add_new' => _x('Add New', 'add new'), 'add_new_item' => __('Add New Modality Post'), 'new_item' => __('New Modality Post'), 'edit_item' => __('Edit Modality Post'), 'view_item' => __('View Modality Post'), 'all_items' => __('All Modality Posts'), 'search_items' => __('Search Modality Posts'), 'not_found' => __('No Modality Posts found.'), ); // 注册参数配置 $args = array( 'supports' => $supports, 'labels' => $labels, 'public' => true, 'query_var' => true, 'rewrite' => array('slug' => 'modality-post'), // 去掉空格,用连字符更符合URL规范 'has_archive' => true, 'hierarchical' => false, 'show_in_rest' => true, 'taxonomies' => array('category', 'post_tag'), ); // 注册自定义文章类型 register_post_type('modality_post', $args); } // 挂载到WordPress初始化钩子 add_action( 'init', 'create_posttype_06' );
后续排查步骤
- 替换代码后,进入WordPress后台→设置→固定链接,直接点击「保存更改」,刷新URL规则
- 检查所有WP Code Snippets中的自定义代码,确保没有提前输出内容(比如echo、var_dump,或者代码开头/结尾的多余空格、换行)
- 如果报错仍存在,暂时禁用其他插件,排查是否有其他插件提前输出内容导致冲突
内容的提问来源于stack exchange,提问作者Andrew Burdette
相关产品推荐
相关产品推荐

