升級 WordPress 1.5

WordPress 1.5版上週正式釋出,這不算是什麼新聞,包括許多在台灣使用WordPress的使用者都已經升級到了新版本,許多甚至在還沒有釋出前就已經更換成開發當中的版本;所以,這個新版本有什麼新功能也就暫且不提,相信在別的地方應該都提過了。

另外,在1.5版還在開發的過程中,piaip就已經製作、完成了正體中文語系檔案zh_TW.po檔案,因此在1.5版釋出的同時,正體中文版的使用者也便立刻已經有了正體中文版本可以使用(下載),因為這陣子我幾乎都把心思放在別的事情上(例如什麼藏文輸入之類的),正體中文的 WP 1.5 版的相關工作,幾乎都是 piaip 獨立完成的。不過,我剛剛看了一下中文WordPress專案的svn repository裡頭好像缺漏了一些檔案的樣子,似乎是在1.5版釋出的前幾天,官方將一些檔案又拆成了獨立的檔案,而忘記順便 svn add 這些檔案,等下應該再來檢查一下。

在 WordPress 的上一個正式釋出的版本—1.2.2到1.5版之間,在結構上有不少的改動,如果您像我一樣,在使用1.2系列時做了許多改動,在升級到新版的時候,有些地方實在會讓人覺得有一些討厭。

在1.2到1.5之間我以為最大的差別,就是在於新增的,根據之前Kubrick套件所設計的佈景主題(themes)功能,也就是,在之前的版本中,在進入到 index.php 的時候,就直接在這個中直接以各種php語法讀取資料,而在佈景主題系統下,則是根目錄下的 index.php 其實是一個空殼,會根據瀏覽時在網頁中指定的彙整(archive)頁面類型(如首頁、單篇彙整、分類彙整、日期彙整等),用include語法載入在「wp-contents/themes/佈景主題名稱/」目錄下的不同 PHP 頁面。

在1.5版釋出的前兩天,官方終於做了一些向下相容的功能,所以如果您對於1.2版的 index.php 檔案修改不大,倒是可以依據官方的這份文件,將之前修改過的 index.php 設計為新版 WP 的佈景主題。但是,如果您之前在 index.php 中就 include 了其他 PHP 檔案,當 index.php 變成一個在佈景主題中又被 include 過一次的檔案的時候,不斷的重複 include ,而原本的 index.php 又改了位置,最後就是載入路徑整個亂掉了。

另外,如果您又用了Staticize Reloaded這個可以將頁面快取起來,好加速瀏覽時的效能的外掛程式的話,狀況就更複雜了。因為Staticize Reloaded的原理是將第一次瀏覽某篇文章的顯示效果,儲存成一個大部分已經render成最後 HTML 內容的 PHP 頁面,而下一次讀取這篇文章時,則又是從快取當中,再一次把這個 PHP 頁面給,對,include 進來。結果我就斷斷續續花了將近一天的時間,才搞定這種路徑錯亂的狀況,而解決方法是,我放棄了Staticize Reloaded,改用這個月初Ricardo Galli重新寫出來的WP-Cache 1.0

WP-Cache 比較沒有 Staticize Reloaded 在 include 頁面時路徑會出狀況的問題,但是實際在使用的時候,還是可以發現 WP-Cache 的一些缺陷,比方說,WP-Cache不支援Staticize Reloaded的mfunc語法,那麼,在頁面被快取起來的時候,就無法動態呼叫一些自訂的 PHP function,也就意味,我在升級之後,其實把一些功能從站上給拿掉了。另外,在第一次載入某篇文章的時候,會無法 include 在 <!–mclude–> 語法包住的 <?php include(“blah.php”) ?> 語法所指定的頁面,反而是直接把 <?php include(“blah.php”) ?> 印出來給你看。所以要把

if (ereg("(.*?)|s', '', $buffer);
$meta_object->dynamic = true;
$buffer = $store;
}

改成

$biffer = preg_replace('|(.*?)|s', '', $buffer);

而之前 wp-blog-header.php 這個檔案負責處理接受所有從外部傳入的參數,然後根據參數從資料庫中讀取所需要的文章資料,例如傳入搜尋關鍵字,就傳回所有符合的文章等,而現在改成在wp-includes/classes.php 裡頭,所以如果之前有改過 wp-blog-header.php 的話,升級之後就無法用原本的方式修改。例如,之前我有說過,如果要讓某個分類的文章不要顯示在首頁上的話(像我的sideblog這個分類,分類id是1),在1.2版是這樣改wp-blog-header.php :


if($cat == 0 && $category_name == '' && !$p && !isset($user_ID) && !$s && !$year){
$join = " LEFT JOIN $tablepost2cat ON ($tableposts.ID = $tablepost2cat.post_id) ";
$whichcat .= " AND";
$whichcat .= " (category_id != $cat_aside)";
}

在1.5版中,就需要改classes.php,而且用的變數名稱也都不太一樣。在大概416行左右的地方,插入:


if(is_home()) {
$join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) LEFT JOIN $wpdb->categories ON ($wpdb->post2cat.category_id = $wpdb->categories.cat_ID) ";
$whichcat .= " AND";
$whichcat .= " (category_id != 1)";
}

7 thoughts on “升級 WordPress 1.5

  1. Pingback: JoeHorn 的啟示錄 » 安裝 WP-cache 該注意的地方

  2. Z老大有沒有考慮再弄一個功能多多的1.5包呢?
    用習慣上次你包裝的1.2版,突然要忘卻那堆好用的功能,真難啊…

  3. 對了,回應這篇後才發現,「日曆」等等區塊,都跑到「Show Referer」的下面去了
    莫非是css有問題嗎?

  4. 回>>丁肇辰:
    我是wordpress新手,不過我見你個臨時網裏,訪客留言時,有姓名網址電郵輸入方塊呢。
    我相信你看不見是因為你以domain登入了,wordpress為方便起見因而將他們都縮起來不用你輸入。

    此外,你所指的第三點,若要將那些英文字諸如:「Currently browsing…」這些進入archive出現的英文,得需要進入佈景編輯器裏去修修date.php這個檔。

  5. Pingback: 老貓學出版

Comments are closed.