忙了几天,晕头转向,有几天都要弄到凌晨两点才愿意去睡,明明已经超困了,但是看到那些该死的问题和错误,我实在是放不下心去睡觉啊。各位别介意,忍不住发几句牢骚,马上转入正题吧。这几天让我困扰的东西就是 WordPress 这博客神器了。我以前写过 WordPress 相关的文章,但不深入,只是比较浅显的东西,因为那个时候我研究比较多的是 dedecms,现在我就给大家总结一下我这几天碰到的一些问题和解决方法。

搭建服务器、安装 WordPress 之类的基础东西我就不再重复赘述了,大家可以看看之前写的文章,叫 《身为站长的我分享给新人的一些经验》 。今天我要讲的东西是比之前深入一点的,可能大家已经碰到或者以后将会碰到的问题。

1 、主题模板问题

相信 99% 的站长使用 WordPress 必定是用模板的,而不是自己开发的,因为 WordPress 身为国外最知名的 cms,拥有无数的粉丝和用户者,自然资源群是非常庞大的,各类插件和主题数不胜数,在国内也渐渐变得十分的流行。不过很重要的一点是,许多模板都是抄袭后稍作修改的盗版作品,这类作品最大的缺陷是,一次性。何为一次性呢?

就是只有一个版本,不再更新,因为它是抄袭的,完全没必要跟着原版去更新。这类主题因为长期不更新,很容易存在 bug,大家可以打开 wp_config.php 这个 WordPress 配置文件,找到里面的一行代码,叫 define('WP_DEBUG', false),把其中的 false 参数改成 true 。这个是主题开发者常用的功能,开启后,登陆 WordPress,会出现 debug 反馈,你可以看看你的主题文件是否有问题。通常问题都出在 xxx_options.php 这个文件。此文件是主题在 WordPress 后台的设置页面,目的是方便新手站长设置网站,但是很多偷盗者抄袭的主题,这里都会有问题,而这个问题导致的直接结果就是在 WordPress 后台处理完操作项返回空页面。

如果 debug 反馈的信息中,包含 xxx_options.php 和 WordPress 本身的 pluggable.php,那么问题就出在 xxx_options.php 这个文件的编码问题。 WordPress 的后台 php 文件的默认编码是 ANSI,而作者开发的主题通常是 UTF-8,这没有问题,问题在于部分主题是带 BOM 的 UTF-8,就是带签名的,比普通的 UTF-8 在文件头部多了几个看不见的 16 进制。解决的办法是,用 UltraEdit 打开文件,另存为无 BOM 的 UTF-8 即可。大家可以多利用 define('WP_DEBUG', true) 这个功能去解决平常碰到的一些问题,遇到解决不了的记得用搜索引擎去找答案。

2 、主题里的 functions.php

我不知道这个是通病还是某些主题作者比较恶心人,如果你在 ftp 里直接覆盖修改过的 functions.php,结果是两个文件里的内容合并,而不是覆盖。另外,在你切换主题的时候,这类恶心的主题也会把其他主题的 functions 通通合并到它的 functions.php 下,这样会导致某些功能函数冲突,导致 WordPress 后台和网站前台都打不开,即便打开了也很慢,严重的还会导致服务器崩溃。所以大家最好要注意 functions.php 这个文件的使用,在 ftp 上修改的时候,最好删掉之后重新上传,而不要直接覆盖。

3 、插件与新版本的 WordPress 兼容问题

当你打开 define('WP_DEBUG', true) 后,你会很容易看到,WordPress 提醒你,在 2.X 以后的版本,WordPress 修改了很多地方,在头部信息返回的问题上与之前的版本有较大差异,长期不更新的插件可能会出现兼容性问题,这个时候,你要做的就是按照 debug 提示修改插件里的文件。例如 Delete-Revision 这个好用的插件因为作者已经停止更新了,所以在兼容性上有点问题,你要把 add_options_page('Delete-Revision', 'Delete-Revision','8', basename(__FILE__), 'my_options_delete_revision') 改成 add_options_page('Delete-Revision', 'Delete-Revision','manage_options', basename(__FILE__), 'my_options_delete_revision') 。其他的插件也差不多,需要修改里面传递的参数,只要稍微懂一点开发知识的站长,解决起来并不难。

4 、去掉 WordPress 自带多余的头部信息

你可以打开一个 WordPress 搭建的网站页面,查看源代码,你会发现在中间有大量的标签,很多其实是完全没有必要的,只会延缓页面载入速度,造成服务器负担而已。下面我就列出通常需要去除的多余头部标签:

remove_action( 'wp_head','wp_generator');

remove_action( 'wp_head','rsd_link');

remove_action( 'wp_head','wlwmanifest_link');

remove_action( 'wp_head','wp_shortlink_wp_head', 10, 0);//去掉 shorlink 标签,固定链接优化后,shortlink 反而是带? 的动态,比起伪静态差远了,还会让搜索引擎认为是重复内容。

remove_action( 'template_redirect','wp_shortlink_header', 11, 0);

add_filter('show_admin_bar','__return_false');//移除网站后台登陆后,前台显示的 admin 条

remove_action( 'wp_head', 'index_rel_link');

remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );

remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');//去除标签中 pre 、 next 这样的标签 (看似有用,实则无用)