WordPress 是世界上最为流行的博客建站程序,以网站模板、网站插件数量众多且功能完善而见长,在国内也不乏众多的使用者。然而,作为新浪 SAE 建站
平台中为数不多的默认推荐应用,WordPress 却因为平台种种限制而导致大量原有插件资源需要移植才可以应用,而目前官方已完成移植的插件数量寥寥,
这给 SAE 平台上的使用者带来了烦恼。本文以我个人的插件移植实战为案例,分享经验,抛砖引玉。

国内 WordPress 爱好者应该大部分都听说并使用过 Baidu Sitemap
Generator 这款 Sitemap 插件 (插件作者:柳城博客) 。因为新浪 SAE 平台不能设置目录 777 权限的问题,导致该插件目前不能直接应用,和众
多 SAE 使用者一样,我本人也一直希望官方能对此做一个移植,但很遗憾,至今只见到官方放出 Google
sitemap 的移植版。插件久等不来的情况下,我个人做了一次移植尝试,并取得了成功,在这里分享一下方法:

与传统主机服务方式不同,新浪 SAE 不支持直接的目录写权限,而是通过分布式 Storage 存储服务解决。也就是说,凡是会在主机目录下生成文件的
插件都不能直接应用在 SAE 平台上。那么现有插件如何改造才能使用呢?为此我研究了一下官方发布的 Google
sitemap 插件移植版,在插件源代码文件 sitemap-core.php 中,我发现了解决此问题的关键部分。在 sitemap-core.php 源
码第 1385 行,GetXmlPath() 函数中,我发现定义存储路径的代码如下图所示:

注意图中标红的部分,该段代码提示我们,SAE 平台将应用具有写入权限目录的路径定义为」saestor://WordPress/」,而未移植的
插件中,关于路径的获取通常用的是调用 GetHomePath() 函数获取,返回的结果则是网站域名的当前根目录路径,这个目录在 SAE 环境下不可写,所
以造成插件报错,这也就是问题的根源所在。

发现上面的官方处理方式后,我开始进行对应的 Baidu Sitemap Generator 改造。

打开 Baidu Sitemap Generator
的核心文件 baidu_sitemap.php,找到负责 xml 地图文件和 sitemap.html 静态文件写入的函数—
build_baidu_sitemap(),手术在这里进行。在源码第 322 行,我们看到如下图所示代码:

看到了吧,XML 文件生成时的路径参数果然是通过 GetHomePath() 这个函数获取的,并且有一个 if 语句来判断权限,这就是问题所在,我们把路径的定义修改为 Storage 存储路径,并且把 if 条件判断中关于 $GetHomePath 的条件去掉,结果如下图:

这样,我们对 XML 文件生成的修改就完毕了,下一步是修改负责静态 Html 地图生成的代码,在源码第 363 行,同理修改下图红框内代码:

修改后如下图 (或者干脆把 if 判断去掉,也可以:)):

另外,我们还需要修改源码中的第 358 行 $sitemap_url 这个变量的值为静态地图文件的 url 地址,因为这个变量的值会输出在生成的静态地图文件顶部导航里,不修改的话,该链接会跳转到 404 页面去,对搜索引擎不够友好。

至此,我们对 Baidu Sitemap Generator
的移植接近尾声,修改后的代码已经可以正确的在 SAE 平台上执行了,你可以在 SAE 后台的 Storage
中看到生成的 Sitmap 文件,如下图所示,文件路径应该是 http://xxxx-WordPress.stor.sinaapp.com
/sitemap_baidu.xml
的形式 (xxxx 是你的应用名称),静态 html 文件的路径也是如此,文件名为 sitemap.html,赶紧把地图文件地址加进你的 footer 模板里
吧:) 。

一点美中不足,插件后台中关于 XML 文件状态的信息,在成功生成文件后却不能正确显示,我想这还是和文件路径判断有关,但我在这一点上没有深究,毕竟我需要的功能已经实现了。

最后,说一下我一点个人想法:云计算技术对行业未来的影响力是每一位站长都不容忽视的,新浪 SAE 平台作为国内云计算领域的先行者,现阶段应用确实
还有诸多不便,但我相信会日臻完善。作为一名普通的 WordPress 爱好者,笔者以此文作抛砖引玉,文中代码修改能实现功能,但欠严谨,希望最终由插件
原作者或新浪官方做一个更完善,更权威的移植版本。

本文由 http://gaoxy.sinaapp.com 原创供稿,Chinaz 首发,转载请注明保留链接。