修复WordPress站点地图.xml“第3列第6行的错误”

WordPress网站自5.6以后就自带的站点地图,不用借助第三方插件。默认地址为/wp-sitemap.xml。但是老白博客今天在访问站点地图.xml文件时,却报错提示:

This page contains the following errors:
error on line 3 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.

通过查询发现可能的原因是:①插件与主题冲突;②wp-config.php或主题文件functions.php文件的开头(<?php行之前)或结尾的空行

经过排查空行发现,应该是第一个原因,更换了主题之后就能正常访问https://www.xcbtmw.com/wp-sitemap.xml

更正:为第二个原因,详看下方代码含义

修复方法

document主题评论区发现了一个,通过修改wp-blog-header.php代码实现的,将下面的代码替换掉wp根目录该文件即可

<?php
/** * Loads the WordPress environment and template. * * @package WordPress */
if ( !isset($wp_did_header) ) { 
$wp_did_header = true; ob_start(); 
require_once( dirname(__FILE__) . '/wp-load.php' ); ob_end_clean(); 
wp(); require_once( ABSPATH . WPINC . '/template-loader.php' );
}

修复WordPress站点地图.xml“第3列第6行的错误”

但是,经过测试,老白博客该方法仍然不行,需要添加一个PHP文件执行,教程如下

添加主题PHP修复错误

下载spacefix.php文件,放到主题根目录:https://qtrj.lanzoul.com/ikTHS14v389c

在主题目录functions.php文件中的第一行“<?php”之后添加“include(”spacefix.php“);”,添加后的样式如下

<?php
include("spacefix.php");

然后问题就搞定解决了。

代码含义

spacefix.php中代码的作用是为了修复空白字符,以确保输出的内容没有额外的空白字符干扰,也就是上面说到的第一个原因

函数___wejns_wp_whitespace_fix的主要逻辑如下:

初始化变量$allowed和$found,它们用于确定是否允许修复空白字符。
使用headers_list()函数遍历所有的HTTP响应头部信息。
如果某个响应头部信息的内容类型(Content-Type)匹配正则表达式/^content-type:s+(text/|application/((xhtml|atom|rss)+xml|xml))/i,则将变量$allowed设置为true,表示允许修复空白字符。
如果某个响应头部信息以Content-Type开头,则将变量$found设置为true,表示找到了Content-Type头部信息。
如果$allowed为true或者没有找到Content-Type头部信息,则使用正则表达式/As*/m将输入的内容中的开头空白字符替换为空字符串。
否则,直接返回输入的内容。
最后,通过ob_start("___wejns_wp_whitespace_fix")函数,将修复空白字符的函数应用于输出缓冲区,以确保输出中的空白字符被修复。

参考文章

https://wordpress.org/support/topic/sitemap-error-on-line-3-at-column-6-xml/
http://www.518theme.com/wpcourse/514.html
https://presswork.me/error-on-line-3-at-column-6