升级到wordpress2.3

升级到wordpress2.3

折腾了一天,终于将blog系统升级到wordpress2.3中文版。下午一直在看网上的一些升级文章,wordpress2.3由于数据库改动较大,升级可能导致很多插件冲突。所以预先将目前在用的几个插件都先升级好,尤其是Google XML Sitemaps和Extended Live Archives,ELA官方没有更新,请使用网友istef修改的版本。另外,由于wordpress2.3引入了自带的tag系统,原来用的tag插件UTW将无法使用,需要卸载。原来的tag可以通过wordpress提供的导入功能导入到新系统中,方法是,在后台管理中选择管理->导入->Ultimate Tag Warrior,点几下鼠标即可。

升级过程很简单:

第一步:备份数据库。我用的dreamhost主机,最简单的备份方法,一是使用WordPress Database Backup插件备份;另外一种方法就是新建一个mysql库,然后利用dreamhost提供的phpMyadmin将原库复制一份到新库中,注意字符集的选择。

第二步,配置好wp-config.php中的数据库连接信息,然后上传wordpress2.3中文版上传到根目录下,将网站原目录改名,再将新的wordpress2.3的目录改成原来的名字。通过前两步,即使升级失败,也可以方便的切换回旧系统,万无一失。

第三步,执行/wp-admin/upgrade.php升级,点一下鼠标,一秒钟搞定。

第四步,迁移upload的文件,修改模板和插件等。

前面三步都非常简单,也没什么风险。主要是第四步要花比较多的时间。原来相关文章的功能依赖于UTW插件,而wordpress2.3自带的tag系统目前还比较弱智,一是不好管理,二是没有引入根据tag显示相关文章的插件。所以不得不为这两个功能又装上两个新的插件:Advanced Tag Entry用于管理tag,Tag Converter 4 UTW用于显示相关文章。

还有一个问题,就是原来使用ST_AddRelated2Feed插件给Feed输出加上了相关文章,但是这个插件也是基于UTW的,所以需要修改,使用tag converter 4 UTW来获得相关文章。由于tag converter 4 UTW的TC_ShowRelatedPostsForCurrentPost函数采用的直接echo输出相关文章而不是return的方式,导致Feed中相关文章在最前面显示了,所以还得在tag converter 4 UTW中复制一个TC_ShowRelatedPostsForCurrentPost4Feed函数,将相关文章的字符串return而不是echo

顺便提一下wordpress2.3自带的tag系统的两个调用函数:the_tags()用于显示某篇文章的tag,wp_tag_cloud()用于显示标签云。两个函数都有大量的参数,可以到/wp-includes/category-template.php中找到函数定义的地方了解具体的参数。

同时将模板的字体从12px调大到14px,虽然看起来没那么整齐了,对眼睛还是有好处的^_^

可能还有些没考虑到的地方,如果大家在浏览本站的时候发现问题,请留言告知,谢谢。

Wordpress 2.3 Beta 1发布

搭这个blog的时候,wordpress2.2刚出来,后来陆续出了几个安全补丁,但是由于自定义了几处代码,就一直没有没有更新。今天wordpress2.3 beta1发布了。2.3将内建tag支持,这样臃肿的Ultimate Tag Warrior插件就可以退休了,另外本站的相关文章插件也是基于UTW的,也需要相应的修改,这个改动似乎很多,还会影响到模板,看来有空也要测试测试了,这个功能似乎2.2就说要加入的,但是后来还是拿掉了,不知道这次会不会跳票。另外还有SEO友好的URL重定向,修改了部分核心代码和插件代码,更快的javascript脚本等。有兴趣的可以点这里下载

据说2.3正式版本将在9.24发布,看来国庆又有得忙了,呵呵

Wordpress插件:历史上的今天

偶然看到一些网站上显示历史上的今天发生的一些事情,觉得很有意思,就想在blog上也借用一下,也正好用这个简单的需求来开发一个简单的wordpress插件。对于PHP不是很熟悉,经过几个小时的摸索,终于算是成功了,效果请见本站头部。将代码稍加修改,便可以实现诸如唐诗宋词,英语900句之类的其他效果。

本插件中的数据是从网上获得的,数据文件以UTF8编码方式存放。

如果你有更完整的版本或者有其他语言版本的,欢迎和我共享。

插件下载:Today in History 1.0

插件安装:
1.下载后解压,将TodayInHistory整个目录放置在wordpress的\wp-content\plugins下
2.在管理界面中启用插件Today in History
3.在需要显示的地方调用函数echo ng_today_in_history()

由于每次调用该函数都会随机显示一条信息,如果需要像本站一样生成自动在google中查询的超链接,则需要先用变量临时保存调用结果,例子如下:

<?php
if(function_exists('ng_today_in_history'))
{
    
$history=ng_today_in_history();
    
echo "<a href=\"http://www.google.cn/search?q=".$history."\">".$history."</a>";
}
?>

使用过程中如果有其他问题,或者发现bug,请留言。

Note:关于时区的问题
本站服务器时间和北京时间相差15个小时,且PHP版本是4.x,为了以北京时间显示历史上的今天,需要将TodayInHistory.php中获得当前月和天的时间函数修正为:

$today=date("md",strtotime('+15 HOUR'));

如果PHP是5.1以上版本,则加入一句时区设置语句,即可解决时区问题:

date_default_timezone_set('PRC');

打开wordpress压缩选项导致warning

刚才勾选了“选项”->“阅读”->“如果浏览器要求,则 WordPress 应当在传输前压缩文章 (gzip) ”,结果导致FeedBurner页面出现警告:

无法显示 XML 页。
使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。
——————————————————————————–

XML 文档只能有一个顶层元素。处理资源 ‘http://feeds.feedburner.com/NinGoo’ 时出错。第 2 行,位置: 2

Warning: ob_start() [ref.outcontrol]: output handler ‘ob_gzhandler’ cannot be used after ‘URL-Rewriter’ in /home/.moonstruck/ningoo/ningoo.net/wp-includes/functions.php on line 419
-^

找到functions.php一看:

function gzip_compression() {
    
if ( !get_option('gzipcompression') ) return false;
 
    
if ( extension_loaded('zlib') ) {
        
ob_start('ob_gzhandler');
    
}
}

ob_start(’ob_gzhandler’);正是第419行,果然是压缩功能引起的。Google了一把,似乎这是php的一个bug?取消勾选后已经恢复正常。