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