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 首發,轉載請註明保留鏈接。