吵吵   2013-05-26  阅读:2,890

今天用博客聚合去更新博文的时候,发现程序没有办法读取我博客的rss了,所以文章就还是上个月发表的那篇,无法更新。于是我跑到我的博客点击rss进入发现谷歌chrome竟然报错了,换了IE进去后也同样报错,我的博客一定是有问题了。


google chrome报的错误如下:

This page contains the following errors:

error on line 4 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.

xml-erro

翻译过来的错误就是:xml文档申明只能在文档的开头部分。

于是我点开chrome的源文件看了,奇怪的是文档最上面有了三个空行,xml的文档是从第四行才开始出现的。难怪会报错的。

整理插件

一开始我以为是最近新装的一些插件的问题,于是乎我跑到后台,禁用了无觅、多说等插件,回头发现这个空行依旧存在。一怒之下我一个一个插件禁用测试,后来发现依旧无法解决。

搜索解决方案

百度这个错误找了半天也没啥内容(这也正应了百度搜索不出东西的说法),google之后,在wordpress论坛发现了一个相似的问题,只不过那个作者报错的是第2行,我是第四行。按照下面的说法,下载了一位大神提供的fix-rss-feed的插件,该插件都已经更新到3.1版本了。抱着极大的希望,装好后得到了极大的失望。看来还不是这个问题啊。

自己动手,丰衣足食

无奈之下,我只得自己一步一步调试了,先从index.php开始,用echo ‘test’来进行测试,看看test出现的是在三个空行的上面还是下面。直到我一路跟踪到wp-setting.php中下面这段代码时候,echo ’test‘ 在前后的内容不一样了:

// Load the functions for the active theme, for both parent and child theme if applicable.
if ( ! defined( 'WP_INSTALLING' ) || 'wp-activate.php' === $pagenow ) {
	if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
		include( STYLESHEETPATH . '/functions.php' );
	if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
		include( TEMPLATEPATH . '/functions.php' );
}

如果你懂php就能直到上述部分载入了主题下的funcitons.php页面,因此我们可以断定问题就出在这里了,转到主题的functions.php中,我们可以发现有这样一段代码:

echo "</div>\n";   
}   
}  
?>

<?php
//移去头部不需要的代码
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'start_post_rel_link');

移去头部不需要的代码是我从我爱水煮鱼的博客找到去除博客头部一些无用信息的。但是加了一个php的开始符,而这段代码与上一段代码之间,刚好就有了三行的空白,原来问题在这里!

总结

从wp-setting.php中就可以看出wordpress中主题的functions.php的层级还是蛮高的,因为主题在很多页面中不一定会展示出来,但是里面用到的一些钩子,和一些非显示元素的改变则需要这个文件来支撑。

在php文件中,在php标记代码块外面的所有部分都会以html格式输出,所以如果有多个代码块的话切记不要空行出来了!

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

一条回应:“解决wordpress的feed页面报错问题”

  1. 工厂标语说道:

    自己动手,丰衣足食

发表评论

电子邮件地址不会被公开。 必填项已用*标注