<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>roga&#039;s blog &#187; WordPress</title>
	<atom:link href="http://blog.roga.tw/category/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.roga.tw</link>
	<description>永遠比妳還任性</description>
	<lastBuildDate>Wed, 28 Jul 2010 15:51:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>WordPress 3.0 Menus</title>
		<link>http://blog.roga.tw/2010/03/30/2378</link>
		<comments>http://blog.roga.tw/2010/03/30/2378#comments</comments>
		<pubDate>Tue, 30 Mar 2010 02:59:34 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=2378</guid>
		<description><![CDATA[在的 WordPress 3.0 alpha 在 Appearance 裡面多了一個選項叫做 Menus. 這個選項已經出現好一陣子了，不過剛剛才心血來潮去看看是怎麼回事&#8230; 以往 WordPress 如果要做選單，通常是用 &#60;?php wp_list_pages( $args ); ?&#62; 搭配 ul li 然後再用 CSS 去控制呈現方式。不過現在 WordPress 3.0 以後， Page 終於可以專心當 Page 了， Page 的 Title 也不用再兼任選單名稱的角色，至於產生選單的事情就交給 Menus 吧！ Menus 的選項可以是 Page, Category, 或是 Custom Link，而且在後台可以產生多個 Menu 不怕不夠用。 註冊方法：在你的 theme (例如 header.php) 裡面加入 add_theme_support( 'nav-menus' ); 這部份的程式碼如果想看詳細的判斷方法，可以從 /wp-admin/nav-menus.php [...]]]></description>
			<content:encoded><![CDATA[<p>在的 WordPress 3.0 alpha 在 Appearance 裡面多了一個選項叫做 Menus. 這個選項已經出現好一陣子了，不過剛剛才心血來潮去看看是怎麼回事&#8230;<br />
<span id="more-2378"></span><br />
以往 WordPress 如果要做選單，通常是用
<pre class="brush: php;"> &lt;?php wp_list_pages( $args ); ?&gt; </pre>
<p> 搭配 ul li 然後再用 CSS 去控制呈現方式。不過現在 WordPress 3.0 以後， Page 終於可以專心當 Page 了， Page 的 Title 也不用再兼任選單名稱的角色，至於產生選單的事情就交給 Menus 吧！</p>
<p><b>Menus 的選項可以是 Page, Category, 或是 Custom Link，而且在後台可以產生多個 Menu 不怕不夠用。</b></p>
<p><a href="http://www.flickr.com/photos/roga/4475466722/" title="WordPress Menus by Roga Lin, on Flickr"><img src="http://farm3.static.flickr.com/2704/4475466722_52b0a8518e.jpg" width="470" height="500" alt="WordPress Menus" /></a></p>
<p>註冊方法：在你的 theme (例如 header.php) 裡面加入 </p>
<pre class="brush: php;">add_theme_support( 'nav-menus' );</pre>
<p>這部份的程式碼如果想看詳細的判斷方法，可以從 /wp-admin/nav-menus.php 這邊往回 trace 。</p>
<p>呼叫方法：直接在 template 加入 (這個方法確定可以適用於 WP SVN Trunk 的 revision 13871 ) 。</p>
<p>實做方式：</p>
<pre class="brush: php;">
&lt;?
    wp_nav_menu( $args );
    $args = array( 'menu' =&gt; '',
            'container' =&gt; 'div',
            'container_class' =&gt; '',
            'menu_class' =&gt; 'menu',
            'echo' =&gt; true,
            'fallback_cb' =&gt; 'wp_page_menu',
            'before' =&gt; '',
            'after' =&gt; '',
            'link_before' =&gt; '',
            'link_after' =&gt; '',
            'depth' =&gt; 0,
            'walker' =&gt; '' );
?&gt;
</pre>
<p>舉例而言，下面程式碼可以取回名為 roga-test 的這個 Menu (後台可以自訂 Menu 名稱)，並且將 css 的 class 指定為 roga-menu</p>
<pre class="brush: php;">
wp_nav_menu(array( 'menu' =&gt; 'roga-test', 'menu_class' =&gt; 'roga-menu'));
</pre>
<p>另外，我在 trace code 發現註解和實際接到的參數很多都不一樣(參考下圖)，當然，實際可以用的參數還是以 WP Codex 那邊公佈的為主。<br />
<a href="http://www.flickr.com/photos/roga/4475366268/" title="有時候寫程式不能太相信文件... by Roga Lin, on Flickr"><img src="http://farm5.static.flickr.com/4066/4475366268_0d2563f97d.jpg" width="500" height="332" alt="有時候寫程式不能太相信文件..." /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2010/03/30/2378/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress 新增了 Trash Post / Comment 機制</title>
		<link>http://blog.roga.tw/2009/08/12/2281</link>
		<comments>http://blog.roga.tw/2009/08/12/2281#comments</comments>
		<pubDate>Wed, 12 Aug 2009 01:28:54 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=2281</guid>
		<description><![CDATA[一直想稱讚 WordPress 一個很實用的新功能(我找不到從哪個版本開始有這個功能)：原本刪除 Post / Comment 的 Delete 按鈕變成了 Move to Trash ，這個功能非常棒，因為我曾經有過幾次刪掉文章之後又想救回來的經驗，多了這個功能，就算刪掉的文章，還是可以從垃圾桶救回來(當然也可以在垃圾桶內執行永久刪除的動作)。 而在程式方面的實做則是利用原本的 wp_post.post_status 以及 wp_comments.comment_approved 兩個欄位，標示為 trash 代表是被丟到垃圾桶的訊息。 備註：我目前使用 WordPress 2.9-rare 版本]]></description>
			<content:encoded><![CDATA[<p>一直想稱讚 WordPress 一個很實用的新功能(我找不到從哪個版本開始有這個功能)：原本刪除 Post / Comment 的 Delete 按鈕變成了 Move to Trash ，這個功能非常棒，因為我曾經有過幾次刪掉文章之後又想救回來的經驗，多了這個功能，就算刪掉的文章，還是可以從垃圾桶救回來(當然也可以在垃圾桶內執行永久刪除的動作)。<br />
<span id="more-2281"></span><br />
而在程式方面的實做則是利用原本的 wp_post.post_status 以及  wp_comments.comment_approved 兩個欄位，標示為 trash 代表是被丟到垃圾桶的訊息。</p>
<p><img src="http://gallery.roga.tw/d/38045-3/Screenshot-1.png" alt="" /></p>
<p>備註：我目前使用 WordPress 2.9-rare 版本</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2009/08/12/2281/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>重新安裝了 WordPress !</title>
		<link>http://blog.roga.tw/2009/02/14/2149</link>
		<comments>http://blog.roga.tw/2009/02/14/2149#comments</comments>
		<pubDate>Sat, 14 Feb 2009 08:48:06 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=2149</guid>
		<description><![CDATA[這一切都是因為我覺得自己的 WordPress 不夠快！尤其是在後台！ 在幾年前剛接觸到 WordPress 的時候，我嘗試了很多外掛，有些帶給我不少樂趣，有些則是大災難！ 長期這麼搞下來，我的資料庫裡面累積了不少垃圾，因為外掛雖然刪掉了但資料庫裡面的垃圾還是留著&#8230;有鑑於此，我決定重新安裝一個 WordPress 並且去蕪存菁，保留我常用的東西就好。至於其他玩意兒，就再見了！ 這次安裝 WordPress 是透過 SubVersion 取回 Night Build 的方式安裝，會決定這麼做有兩個原因，一是因為我喜歡踩地雷，另一個原因是為了日後升級方便(一個指令輕鬆解決)。 WordPress 官方的 SVN Repository 放在 http://svn.automattic.com/wordpress/trunk/，取回的方式也很簡單 svn co http://svn.automattic.com/wordpress/trunk/ 就完成了。 要更新的時候，則是切換到 trunk 目錄下，然後svn up，輕鬆解決！ 更新的畫面 目前的版本]]></description>
			<content:encoded><![CDATA[<p>這一切都是因為我覺得自己的 WordPress 不夠快！尤其是在後台！<br />
<span id="more-2149"></span><br />
在幾年前剛接觸到 WordPress 的時候，我嘗試了很多外掛，有些帶給我不少樂趣，有些則是大災難！</p>
<p>長期這麼搞下來，我的資料庫裡面累積了不少垃圾，因為外掛雖然刪掉了但資料庫裡面的垃圾還是留著&#8230;有鑑於此，我決定重新安裝一個 WordPress 並且去蕪存菁，保留我常用的東西就好。至於其他玩意兒，就再見了！</p>
<p>這次安裝 WordPress 是透過 SubVersion 取回 Night Build 的方式安裝，會決定這麼做有兩個原因，一是因為<del datetime="2009-02-14T08:42:07+00:00">我喜歡踩地雷</del>，另一個原因是為了日後升級方便(一個指令輕鬆解決)。</p>
<p>WordPress 官方的 SVN Repository 放在 <a href="http://svn.automattic.com/wordpress/trunk/">http://svn.automattic.com/wordpress/trunk/</a>，取回的方式也很簡單 <code>svn co http://svn.automattic.com/wordpress/trunk/</code> 就完成了。</p>
<p>要更新的時候，則是切換到 trunk 目錄下，然後<code>svn up</code>，輕鬆解決！</p>
<p><img src="http://gallery.roga.tw/d/36340-2/Noname.png" alt="" /><br />
更新的畫面</p>
<p><img src="http://gallery.roga.tw/d/36343-2/Noname2.png" alt="" /><br />
目前的版本</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2009/02/14/2149/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>寫了一個新 plugin 給 plurk 用…</title>
		<link>http://blog.roga.tw/2008/12/20/1777</link>
		<comments>http://blog.roga.tw/2008/12/20/1777#comments</comments>
		<pubDate>Fri, 19 Dec 2008 20:06:10 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1777</guid>
		<description><![CDATA[大前天開始玩 plurk ，馬上就覺得這麼好玩的東西，應該要有隻外掛把我的碎碎念抓回來才對，上網找了一下發現真的有這種東西，只是效率不佳&#8230;(因為每次都要從遠端主機 fetch 回來) 昨天晚上加班到快要十一點才回家，一邊點著我自己的首頁，一邊忍受著緩慢的頁面生成速度，終於我還是忍不住自己重新寫了一個外掛。寫完已經一點多了，我都快要中風了&#8230; 然後今天上班中午休息的時候，我又寫了 readme 然後送到 WordPress 的外掛區去。晚上回家後總算有空再玩一下我的小外掛，結果發現有不少地方出錯！像是 $plurk_options 被我打成 $plurk_option ，當然收不到東西，還有陣列的鍵值前後對應不到(因為我自己記錯)，還有快取時間的判斷邏輯也有錯誤，結果又花了快一個小時改寫這隻程式。唉，看來最近我真的太依賴整合式開發環境幫我除錯了&#8230; 如果有興趣玩玩這隻外掛的話請到 “Get Your Plurk” 頁面下載。]]></description>
			<content:encoded><![CDATA[<p><a href="http://gallery.roga.tw/d/36054-1/screenshot-1.png" rel="lightbox"><img src="http://gallery.roga.tw/d/36055-2/screenshot-1.png" alt="" align="right" /></a></p>
<p>大前天開始玩 <a href="http://www.plurk.com/roga">plurk </a>，馬上就覺得這麼好玩的東西，應該要有隻外掛把我的碎碎念抓回來才對，上網找了一下發現真的有這種東西，只是效率不佳&#8230;(因為每次都要從遠端主機 fetch 回來)</p>
<p>昨天晚上加班到快要十一點才回家，一邊點著我自己的首頁，一邊忍受著緩慢的頁面生成速度，終於我還是忍不住自己重新寫了一個外掛。寫完已經一點多了，我都快要中風了&#8230;</p>
<p>然後今天上班中午休息的時候，我又寫了 readme 然後送到 WordPress 的外掛區去。晚上回家後總算有空再玩一下我的小外掛，結果發現有不少地方出錯！像是 <code>$plurk_options</code> 被我打成 <code>$plurk_option</code> ，當然收不到東西，還有陣列的鍵值前後對應不到(因為我自己記錯)，還有快取時間的判斷邏輯也有錯誤，結果又花了快一個小時改寫這隻程式。唉，看來最近我真的太依賴整合式開發環境幫我除錯了&#8230;</p>
<p>如果有興趣玩玩這隻外掛的話請到 <a href="http://blog.roga.tw/get-your-plurk">“Get Your Plurk”</a> 頁面下載。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/12/20/1777/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>&#8220;Get Your Plurk&#8221; Plugin for WordPress</title>
		<link>http://blog.roga.tw/2008/12/16/1719</link>
		<comments>http://blog.roga.tw/2008/12/16/1719#comments</comments>
		<pubDate>Tue, 16 Dec 2008 08:29:44 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?page_id=1719</guid>
		<description><![CDATA[&#8220;Get your Plurk&#8221; could get your plurks from www.plurk.com, and show it on your sidebar. You may enable cache option to save the PHP page gerneration time. Description 可以快取抓回來的頁面，並且自訂快取時間 Cache the plurks, you can config the setting in admin panel. 可以決定要不要顯示時間、使用者名稱 Show date &#038; time for each plurk or not. 支援 Widget 動態拖曳到側攔上 Widget support. [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Get your Plurk&#8221; could get your plurks from www.plurk.com, and show it on your sidebar.<br />
You may enable cache option to save the PHP page gerneration time.<br />
<span id="more-1719"></span></p>
<h3>Description</h3>
<ul>
<li>可以快取抓回來的頁面，並且自訂快取時間</li>
<li> Cache the plurks, you can config the setting in admin panel.</li>
<li>可以決定要不要顯示時間、使用者名稱</li>
<li>Show date &#038; time for each plurk or not.</li>
<li>支援 Widget 動態拖曳到側攔上</li>
<li>Widget support.</li>
<li>外部 CSS 檔案，可以自己定義</li>
<li>Customize CSS file.</li>
<li>自定義語系檔，目前支援英文和繁體中文</li>
<li>Support localization config file, Traditional Chinese and English.</li>
</ul>
<h3>Installation</h3>
<p>* Put the &#8220;get-your-plurk&#8221; folder to plugin folders.<br />
* Make a cache folder like /wp-content/cache/ if the cache folder is not exists.<br />
* add a cache file named &#8220;cache.tmp&#8221;, now you have a cache file like: &#8220;wp-content/cache/gyp-cache.tmp&#8221;<br />
* chmod the &#8220;gyp-cahce.tmp&#8221; file permission to writable (chmod 666 cache.tmp).<br />
* active the plugin.<br />
<code><br />
command:<br />
** cd /wp-content<br />
** mkdir cache<br />
** cd cahce<br />
** touch gyp-cache.tmp<br />
** chmod 777 gyp-cache.tmp<br />
</code></p>
<h3>Changelog</h3>
<ul>
<li>*  1.1.3 &#8211; display username or not, move the cache file path, some code improve.</li>
<li>*  1.1.1 &#8211; fix some css problem.</li>
<li>*  1.1.0 &#8211; plurk looks and feel, and localization config file support. remove the &#8220;show link option&#8221;.</li>
<li>*  1.0.5 &#8211; fix some readme error and default options. </li>
<li>*  1.0.0 &#8211; first release.</li>
</ul>
<h3>Download</h3>
<ul>
<li>Download the <a href="http://wordpress.org/extend/plugins/get-your-plurk/">Get Your Plurk v1.1.3</a></li>
</ul>
<h3>Online Code Review</h3>
<ul>
<li><a href="http://svn.wp-plugins.org/get-your-plurk/">http://svn.wp-plugins.org/get-your-plurk/</a> &#8211; svn</li>
<li><a href="http://plugins.trac.wordpress.org/browser/get-your-plurk">http://plugins.trac.wordpress.org/browser/get-your-plurk</a> &#8211; trac</li>
</ul>
<h3>Screenshots</h3>
<p>	<img src="http://gallery.roga.tw/d/36054-2/screenshot-1.png" /></p>
<h3>Other</h3>
<ul>
<li>You may leave your comment here. <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_smile.gif' alt=':smile:' class='wp-smiley' /> </li>
<li>請在這邊留下您的迴響</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/12/16/1719/feed</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Let it snow.</title>
		<link>http://blog.roga.tw/2008/12/14/1682</link>
		<comments>http://blog.roga.tw/2008/12/14/1682#comments</comments>
		<pubDate>Sun, 14 Dec 2008 05:36:43 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1682</guid>
		<description><![CDATA[在朋友 sotom 的部落格上面看到 wp 冬季應景外掛 &#8211; Let It Snow!，覺得很有趣，所以裝了起來，雪花是用 png 以及 gif 做成的，為了瀏覽器相容，所以預設是 gif ，但我們也可以透過設定強制使用 PNG 圖片.. 在外掛的 JavaScript 檔內的 SnowStorm() 有些屬性可以設置： // User-configurable variables var usePNG = false; // 使用 PNG 圖檔，注意 IE6 不支援 PNG 的 Alpha Channel var imagePath = sitePath + 'image/snow/'; // relative path to snow images // 雪花圖片的位置 var flakeTypes [...]]]></description>
			<content:encoded><![CDATA[<p>在朋友 <a href="http://sotom.tw">sotom</a> 的部落格上面看到 <a href="http://blog.sotom.tw/2008/12/14/36/">wp 冬季應景外掛 &#8211; Let It Snow!</a>，覺得很有趣，所以裝了起來，雪花是用 png 以及 gif 做成的，為了瀏覽器相容，所以預設是 gif ，但我們也可以透過設定強制使用 PNG 圖片..<br />
<span id="more-1682"></span><br />
在外掛的 JavaScript 檔內的 SnowStorm() 有些屬性可以設置：</p>
<pre class="brush: jscript;">
  // User-configurable variables

  var usePNG = false;
  //   使用 PNG 圖檔，注意 IE6 不支援 PNG 的 Alpha Channel
  var imagePath = sitePath + 'image/snow/'; // relative path to snow images
  //   雪花圖片的位置
  var flakeTypes = 6;
  //   使用 0.gif ~ 5.gif 共六種雪花，如果是 5 的話就是使用 0.gif~4.gif 共五種雪花
  var flakesMax = 60;
  //   同時螢幕上最多可以有多少雪花
  var flakesMaxActive = 60;
  //   同時落下雪花最大的數目
  var vMax = 2.5;
  //   定義落下的速度，X 水平和 Y垂直
  var flakeWidth = 5;
  //   圖片寬度
  var flakeHeight = 5;
  //   圖片高度
  var flakeBottom = null;
  //   落下高度的限制，單位是像素，如果是 null 則全螢幕。
  var snowCollect = false;
  //   限制雪花落下時的水平軸位置
  var showStatus = false;
  //   雪花堆積在螢幕下方，建議不要啟動，會浪費 CPU 資源
</pre>
<p>如果想看聖誕節下雪，就點一下這個<a href="http://gallery.roga.tw/d/3951-7/20060908.jpg" rel="lightbox">連結</a>吧 (必須在網誌內點選才有效果)。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/12/14/1682/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>using the Gravatar in WordPress.</title>
		<link>http://blog.roga.tw/2008/11/30/1496</link>
		<comments>http://blog.roga.tw/2008/11/30/1496#comments</comments>
		<pubDate>Sun, 30 Nov 2008 08:44:14 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1496</guid>
		<description><![CDATA[Gravatar is Globally Recognized Avatar, It can be identified by your email address or ID in http://www.gravatar.com/. The Great WordPress supported gravatar system above version 2.5, we can show the avator icon by the function get_avatar(); I patch my theme (comment.php) this afternoon, and let it supported the gravatar icon. if you wants your WordPress [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://gallery.roga.tw/d/35705-3/gravatar.jpg" rel="lightbox"><img src="http://gallery.roga.tw/d/35706-4/gravatar.jpg" alt="" /></a></p>
<p>Gravatar is Globally Recognized Avatar, It can be identified by your email address or ID in <a href="http://www.gravatar.com/">http://www.gravatar.com/</a>.</p>
<p>The Great WordPress supported gravatar system above version 2.5, we can show the avator icon by the function get_avatar(); I patch my theme (comment.php) this afternoon, and let it supported the gravatar icon. if you wants your WordPress to support the gravatar, please follow the steps:<br />
<span id="more-1496"></span><br />
first, if you don&#8217;t have a gravatar, please <a href="http://en.gravatar.com/signup">sign up</a> for one.</p>
<p>second, modify your comment.php in your /wp-content/themes/your_theme/comment.php and insert the function get_avatar(); .</p>
<p>for an example:</p>
<pre class="brush: php;">

    echo get_avatar( $comment, $size = '48', $default = 'url' );

    //   the $comment: just fill the prop. with the variable $comment.
    //   the $size: max is 512
    //   the $default: the default image url, you also can adjust in from your control panel.
</pre>
<p>WordPress also provided for backwards compatibility(from codex.wordpress.org):</p>
<pre class="brush: php;">

    if (function_exists('get_avatar'))
    {
       echo get_avatar($email);
    }
    else
    {
       //alternate gravatar code for &lt; 2.5
       $grav_url = &quot;http://www.gravatar.com/avatar.php?gravatar_id=&quot; . md5($email) . &quot;&amp;default=&quot; . urlencode($default) . &quot;&amp;size=&quot; . $size;
       echo &quot;&lt;img src='$grav_url'/&gt;&quot;;
    }
</pre>
<p>done! that&#8217;s it!</p>
<p>you can learn more at: <a href="http://codex.wordpress.org/Using_Gravatars">Using Gravatars</a></p>
<p>by the way, if you want to test your gravatar, you may leave a comment above this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/11/30/1496/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WP Object Cache 問題</title>
		<link>http://blog.roga.tw/2008/11/21/1381</link>
		<comments>http://blog.roga.tw/2008/11/21/1381#comments</comments>
		<pubDate>Fri, 21 Nov 2008 03:37:42 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1381</guid>
		<description><![CDATA[昨晚弄好 Object cache 之後，修改了 addServer() 的傳入參數部份才能順利執行。詳見我寫的：WordPress 使用 Memcached最下面程式部份。 原本以為我可以 Happily Ever After ，不過今天早上搭捷運上班的時候越想越奇怪&#8230;到了公司後，邊吃早餐邊瀏覽了一下程式碼，卻在 object-cache.php (trunk 版本) 發現一個問題： function WP_Object_Cache() { global $memcached_servers; if(isset($memcached_servers)) $buckets = $memcached_servers; else $buckets = array('default' =&#62; array('127.0.0.1:11211')); foreach ( $buckets as $bucket =&#62; $servers) { $this-&#62;mc[$bucket] = new Memcache(); foreach ( $servers as $server ) { list ( $node, $port [...]]]></description>
			<content:encoded><![CDATA[<p>昨晚弄好 Object cache 之後，修改了 addServer() 的傳入參數部份才能順利執行。詳見我寫的：<a href="http://blog.roga.tw/2008/11/21/1364/">WordPress 使用 Memcached</a>最下面程式部份。</p>
<p>原本以為我可以 Happily Ever After ，不過今天早上搭捷運上班的時候越想越奇怪&#8230;到了公司後，邊吃早餐邊瀏覽了一下程式碼，卻在 object-cache.php (trunk 版本) 發現一個問題：<br />
<span id="more-1381"></span></p>
<pre class="brush: php;">
function WP_Object_Cache() {
  global $memcached_servers;

  if(isset($memcached_servers))
    $buckets = $memcached_servers;
  else
    $buckets = array('default' =&gt; array('127.0.0.1:11211'));

  foreach ( $buckets as $bucket =&gt; $servers) {
    $this-&gt;mc[$bucket] = new Memcache();
      foreach ( $servers as $server  ) {
        list ( $node, $port ) = explode(':', $server);
        $this-&gt;mc[$bucket]-&gt;addServer($node,$port,true,1,1,15,true,array($this, 'failure_callback'));
        $this-&gt;mc[$bucket]-&gt;setCompressThreshold(20000, 0.2);
      }
  }
}
</pre>
<p>如果直接 die(var_dump($memcached_servers)); 或是 die(var_dump($buckets); 會發現值都是 <strong>1</strong></p>
<p>在 php.ini 裡面我找不到 Memcache Server 和 Port 的設置參數。我猜想程式應該也無法從任何地方取得這項資訊。以上這是 Object-Cache.php 2.0 (PECL) 的寫法。不過在 <a href="http://plugins.trac.wordpress.org/browser/memcached/branches/1.0">Object-Cache.php 1.0(sockets)</a> 的寫法內，有一個 memcached-client 可以指定伺服器的設置。</p>
<p>為了暫時解決我的疑惑，乾脆手動指定全域變數，讓參數可以真的傳入 addServer() 內：</p>
<pre class="brush: php;">
/* 加在 WP_Object_Cach::WP_Object_Cache() 的 global $memcached_servers; 宣告下*/
$memcached_servers = array('default' =&gt; array('127.0.0.1:11211'));
/* 或是直接指定 $buckets 這樣對程式更動最少。下面的 foreach 是為了增加多台 Memcache Server */
</pre>
<p>但我不瞭解為甚麼要用 global $memcached_servers; 我用 grep 完全找不到有地方可以設置這個全域變數。</p>
<p>還有，會邊吃早餐邊看這隻程式其實是因為我收到 RSS: <a href="http://andy.wordpress.com/2008/11/19/upgrade-memcached-before-wordpress/">Upgrade Memcached Before WordPress</a></p>
<p>內文：</p>
<blockquote><p>
Self-hosted WordPress and WordPress MU administrators: if you are using the memcached object cache (a prerequisite for batcache), upgrade it before upgrading WordPress. There is a bug that keeps the old db_version in the options cache, preventing WordPress from remembering that it has been upgraded, and this causes it to ask you to upgrade again. In a pinch you can resolve the problem by restarting the memcached daemon.
</p></blockquote>
<p>大意是說：所有自己架設 WordPress 和 WordPress MU 的管理員們，如果你有使用 object-cache.php 的話，請在升級 WordPress 之前先升級 object-cache 這個檔案，新的程式請直接到它的 trunk 去下載。要升級 object-cache 的原因是因為它會 cache 住資料庫的東西，造成升級之後 WP UPGRADE 程式查到的資料庫內容還是 cache 住的，它會以為還沒升級。這個版本(trunk 74885)修改的地方只有一行：第 74 行從<code> return true; </code> 改為 <code> return $wp_object_cache->delete($key, $flag); </code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/11/21/1381/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress 使用 Memcached</title>
		<link>http://blog.roga.tw/2008/11/21/1364</link>
		<comments>http://blog.roga.tw/2008/11/21/1364#comments</comments>
		<pubDate>Thu, 20 Nov 2008 16:23:45 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1364</guid>
		<description><![CDATA[WordPress 除了 PHP 使用 Wp Super Cache 外掛產生靜態頁面，也可以採用 Memcached 來幫忙加速。Memcache 本身分為 Server / Client 兩種，一個是 Memcached ，而 Client 則是各種語言的實做，對 PHP5 而言 php5-memcache 就是它的 Client Library 。 安裝方式 wajig install memcached wajig install php5-memcache 接著修改 Memcache Server 的設定，建議使用預設值就可以了。 vi /etc/memcached.conf 裡面有幾個設定，分別是 -d (用daemon方式執行)， -v (顯示輸出)， -vv (顯示更多輸出)， -m 64 (用64M記憶體)， -p 11211(使用 port 11211)， -u root [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 除了 PHP 使用 Wp Super Cache 外掛產生靜態頁面，也可以採用 Memcached 來幫忙加速。Memcache 本身分為 Server / Client 兩種，一個是 Memcached ，而 Client 則是各種語言的實做，對 PHP5 而言<br />
php5-memcache 就是它的 Client Library 。<br />
<span id="more-1364"></span><br />
安裝方式<br />
<code><br />
wajig install memcached<br />
wajig install php5-memcache<br />
</code><br />
接著修改 Memcache Server 的設定，建議使用預設值就可以了。<br />
<code><br />
vi /etc/memcached.conf<br />
</code><br />
裡面有幾個設定，分別是 -d (用daemon方式執行)， -v (顯示輸出)， -vv (顯示更多輸出)， -m 64 (用64M記憶體)，<br />
-p 11211(使用 port 11211)， -u root (用 root 身份來跑)， -l 127.0.0.1 (監聽的IP/介面) ， -c 1024 (限制連線數目)， -k (鎖定分頁記憶體)， -M (當記憶體耗盡的時候回報錯誤)。</p>
<p>在 /etc/php5/apache2/php.ini 最下面可以看到 wajig 幫忙寫好的設定</p>
<blockquote><p>
extension=memcache.so<br />
[memcache]<br />
memcache.dbpath=/var/lib/memcache<br />
memcache.maxreclevel=0<br />
memcache.maxfiles=0<br />
memcache.archivememlim=0<br />
memcache.maxfilesize=0<br />
memcache.maxratio=0
</p></blockquote>
<p>沒特別需要不用去更改，接著重新啟動 Server 即可！但這樣還不能用，因為雖然裝了 php5-memcache ，但還得在程式中實做才行！</p>
<p>PHP5 透過 PHP Memcache Client Library 實做的方法可以參考 <a href="http://blog.roodo.com/jaceju/archives/2429636.html">在 Windows 上安裝 Memcached </a>，介紹的非常完整，至於 WordPress 的話，則是有人實做了 Objkect-Cache(感謝 <a href="http://shami.no-ip.org/blog/">Shami 的部落格</a> 介紹)，安裝方法是先下載<a href="http://plugins.trac.wordpress.org/browser/memcached/trunk">object-cache.php</a>，然後上傳到 wp-content 目錄下即可自動啟用。</p>
<p>這篇文章參考了：<br />
<a href="http://shami.no-ip.org/blog/136.html">Ubuntu下 讓 WordPress 使用 Memcached 緩存快取加速</a><br />
<a href="http://ihower.idv.tw/blog/archives/1768">如何使用 memcached 做快取</a> &#8211; 推薦！<br />
<a href="http://blog.gslin.org/archives/2008/05/31/1510/">MySQL UDF (User-defined function) 與 memcached</a></p>
<p>效能增加：<strong>在非登入狀態下，載入首頁用 get_num_queries() 算共有個 27 個 Query ，使用 memcached 之後， IE 6 減少到 6 個，Firefox 也是而 IE 7 則是減少到 8 個。(第一次載入查詢次數會比較多，接著因為快取住了，所以會減少)</strong></p>
<p>UPDATE: UPDATE: 如果載入 object-cache.php 後系統錯誤，說 addServer() 只支援傳入六個參數的話，請打開 object-cache.php 找到第 342 行，修改成為：</p>
<pre class="brush: php;">
$this-&gt;mc[$bucket]-&gt;addServer($node, $port, true, 1, 1, 15), true, array($this, 'failure_callback'));
/* 改為 */
$this-&gt;mc[$bucket]-&gt;addServer($node, $port, true, 1, 1, 15);
/* 因為 Memcache::addServer 是這樣的： *
/ bool Memcache::addServer(string host[, int port [, bool persistent [, int weight [, int timeout [, int retry_interval]]]]])
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/11/21/1364/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 加速!</title>
		<link>http://blog.roga.tw/2008/11/20/1350</link>
		<comments>http://blog.roga.tw/2008/11/20/1350#comments</comments>
		<pubDate>Thu, 20 Nov 2008 14:41:57 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1350</guid>
		<description><![CDATA[WordPress Optimization 有很多方法，根據 Codex 裡面的 WordPress Optimization/Cheat Sheet 有幾個方向： Server Optimization DNS onto a separate server Web Server optimization &#8211; ！ PHP acceleration / optimization &#8211; ！ MySQL tweaking (query cache, etc) &#8211; ！ WordPress Performance Remove unused plugins &#8211; ！ Optimize plugins Optimize themes, hardcode static vars, etc &#8211; ！ Offloading Offload static files [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress Optimization 有很多方法，根據 Codex 裡面的 WordPress Optimization/Cheat Sheet 有幾個方向：</p>
<p><b>Server Optimization</b></p>
<ul>
<li>DNS onto a separate server</li>
<li>Web Server optimization &#8211; <strong>！</strong></li>
<li>PHP acceleration / optimization &#8211; <strong>！</strong></li>
<li>MySQL tweaking (query cache, etc) &#8211; <strong>！</strong></li>
</ul>
<p><b>WordPress Performance</b></p>
<ul>
<li>Remove unused plugins &#8211; <strong>！</strong></li>
<li>Optimize plugins</li>
<li>Optimize themes, hardcode static vars, etc &#8211; <strong>！</strong></li>
</ul>
<p><b>Offloading</b></p>
<ul>
<li>Offload static files to separate server</li>
<li>Optimized web servers like publicfile, lighttpd, etc</li>
<li>Offload feed traffic</li>
</ul>
<p><b>Caching</b></p>
<ul>
<li>WP-Cache / Lightpress &#8211; <strong>！</strong></li>
<li>Browser caching</li>
<li>Web server caching</li>
</ul>
<p><b>Adding Database Servers</b></p>
<p><span id="more-1350"></span></p>
<p>上面有 <strong>！</strong> 的地方，是比較容易進行的。其他的選項都是執行難度比較高，或是效益不顯著。</p>
<p>首先，在 Server Optimization 的部份有提到 Web Server optimization ，我認為目前使用 Apache2 最佳的解決方案大概是用 mpm-worker + FastCGI 跑 PHP-CGI ，但是這個我弄不起來，因為在 FCGIWrapper 的設定過不去，所以我還是只好老實用 Prefork 。</p>
<p>接著是 Web server caching 和 Database Caching 這部份可以用 memcache 來做，之後專文介紹。接著下面說的就是比較容易做的作法了！</p>
<p>以下執行環境針對 Debian Linux r4.0</p>
<p><strong>安裝 <a href="http://eaccelerator.net/">eAccelerator</a></strong></p>
<p>首先安裝 php5-dev<br />
<code><br />
apt-get install build-essential php5-dev<br />
</code><br />
切換到暫存目錄，下載並且解壓縮<br />
<code><br />
cd /tmp<br />
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip<br />
unzip eaccelerator-0.9.5.3.zip<br />
cd eaccelerator-0.9.5.3<br />
</code><br />
接著執行<br />
<code><br />
phpize<br />
</code><br />
會出現訊息<br />
  Configuring for:<br />
  PHP Api Version:         20041225<br />
  Zend Module Api No:      20060613<br />
  Zend Extension Api No:   220060519<br />
接下來<br />
<code><br />
./configure<br />
make<br />
make install<br />
</code><br />
make install 之後，會出現一個路徑像是： /usr/lib/php5/20060613+lfs/<br />
在 /etc/php5/conf.d 裡面增加一個目錄，建立一個檔案叫做 eaccelerator.ini 檔案內寫設定：<br />
<code><br />
extension="eaccelerator.so"<br />
eaccelerator.shm_size="16"<br />
eaccelerator.cache_dir="/var/cache/eaccelerator"<br />
eaccelerator.enable="1"<br />
eaccelerator.optimizer="1"<br />
eaccelerator.check_mtime="1"<br />
eaccelerator.debug="0"<br />
eaccelerator.filter=""<br />
eaccelerator.shm_max="0"<br />
eaccelerator.shm_ttl="0"<br />
eaccelerator.shm_prune_period="0"<br />
eaccelerator.shm_only="0"<br />
eaccelerator.compress="1"<br />
eaccelerator.compress_level="9"<br />
</code><br />
接下來建立快取的目錄：<br />
<code><br />
mkdir -p /var/cache/eaccelerator<br />
chmod 0777 /var/cache/eaccelerator<br />
</code><br />
重新啟動伺服器<br />
<code><br />
/etc/init.d/apache2 restart<br />
</code><br />
跑一下版本&#8230;<br />
<code><br />
root@roga:/# /usr/bin/php5 -v<br />
PHP 5.2.0-8+etch13 (cli) (built: Oct  2 2008 08:26:18)<br />
Copyright (c) 1997-2006 The PHP Group<br />
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies<br />
    with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br />
</code></p>
<p><strong>調整 MySQL 的 Query Cache </strong></p>
<p>這個調整對WP的前台的幫助還好，但對後台幫助不少！找到 my.cnf，以下是我伺服器的設定，意思是當查詢超過 4M 的時候不快取，查詢快取總空間佔用 128M ，而且快取模式 = 啟動</p>
<blockquote><p>
query_cache_limit      = 4M<br />
query_cache_size       = 128M<br />
query_cache_type     = 1
</p></blockquote>
<p><strong>安裝 <a href="http://wordpress.org/extend/plugins/wp-super-cache/installation/">WP Super Cache</a></strong></p>
<ul>
<li>修改 /wp-config.php ，加入 define(&#8216;WP_CACHE&#8217;, true); 表示啟動快取。</li>
<li>上傳 WP Super Cache 到 plugins 目錄</li>
<li><code>chown www-data.wwwdata wp-content</code> (將 wp-content 目錄的使用者暫時修改為 Apache2)</li>
<li><code>chmod 777 .htaccess</code> 將網站根目錄下的 .htaccess 暫時設定為可寫</li>
<li>到後台啟動 WP Super Cache ，然後她會改寫 .htaccess 檔，並且新增 wp-content/plugins/wp-super-cache 目錄，以及新增 wp-content/cache/.htaccess 設定檔</li>
</ul>
<p>附註：在 <a href="http://www.websiteoptimization.com/">WebSiteOptimization.com</a> 有提供 <a href="http://www.websiteoptimization.com/services/analyze/">Web Page Analyzer</a>  可以看如何最佳化。</p>
<p>例如：建議透過 HTTP compression  或是optimize JavaScript 和 CSS 來減少傳輸量。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/11/20/1350/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.7 beta 1 釋出</title>
		<link>http://blog.roga.tw/2008/11/01/1101</link>
		<comments>http://blog.roga.tw/2008/11/01/1101#comments</comments>
		<pubDate>Sat, 01 Nov 2008 14:01:00 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=1101</guid>
		<description><![CDATA[今天收 WordPress Development Blog 的 RSS 的時候，終於看到 2.7 beta 在 download 區釋出了(當然 nighty build 早就有了)。 這一路從九月中開始的 WordPress 2.7 Navigation Options Survey，後來九月底的 WordPress 2.7 UI Survey #2: Search box, Favorites menu, Future Publish ，直到十月一日公佈的 WordPress 2.7 Wireframes ，還有 The New 2.7 Dashboard 。 我一直對新的後台的確很感興趣，我看了 Riding The Crazyhorse: Future Generation WordPress 這個 SlideShare 的線上投影片，覺得很多 IDEA 真的很有趣，例如他分析了在後台的各個頁面，人們最常做的各種事情，像是在 Pluings [...]]]></description>
			<content:encoded><![CDATA[<p>今天收 <a href="http://wordpress.org/development/"> WordPress Development Blog</a> 的 RSS 的時候，終於看到 2.7 beta 在 download 區釋出了(當然 nighty build 早就有了)。</p>
<p>這一路從九月中開始的 <a href="http://wordpress.org/development/2008/09/wordpress-27-navigation-options-survey/">WordPress 2.7 Navigation Options Survey</a>，後來九月底的 <a href="http://wordpress.org/development/2008/09/wordpress-2-7-survey-no2/">WordPress 2.7 UI Survey #2: Search box, Favorites menu, Future Publish</a> ，直到十月一日公佈的 <a href="http://wordpress.org/development/2008/10/wordpress-27-wireframes/">WordPress 2.7 Wireframes</a> ，還有 <a href="http://wordpress.org/development/2008/10/the-new-27-dashboard/">The New 2.7 Dashboard</a> 。</p>
<p><span id="more-1101"></span></p>
<p>我一直對新的後台的確很感興趣，我看了 <a href="http://www.slideshare.net/edanzico/riding-the-crazyhorse-future-generation-wordpress-presentation">Riding The Crazyhorse: Future Generation WordPress</a> 這個 SlideShare 的線上投影片，覺得很多 IDEA 真的很有趣，例如他分析了在後台的各個頁面，人們最常做的各種事情，像是在 Pluings 裡面最常做的是從 Flicker 貼圖，在 Manage 選項裡面，最常做的事情是幫文章加入圖片，而在 Profile 裡面則是修改密碼。同時他也分析了 Blog Administrtor 和 Advanced Users(2年以上) 和 新手使用者的使用習性差別。在投影片裡面也提到一些有趣的使用心得回應，像是「I can never remember which menu things are in」(我永遠記不住選單內有什麼玩意兒) (roga註:所以我都用選單外掛)，所以他的改進方法是重新設計選單，增加可用性。另外對於 Dashboard 最多人抱怨的就是「I never look at it」，而對應的解決方法自然就是使用新的版面，讓使用者可以自訂 module 的顯示與否。還有在寫文章的時候，也有人也常常提到「I always forget to add my tags because I have to scroll down」(常常忘記加上標籤，因為得捲動畫面)，當然我也會犯這個問題，我通常都會事後把文章叫出來修正。</p>
<p>不過他在 Reponse 2.5 也挑了一句很耐人尋味的話貼到投影片上&#8230;「I like it so much than Movable Type」哈哈哈！</p>
<p>另外投影片還提到新的後台(Crazyhorse)的設計理念，例如 Top versus left navigation, Quick Press, Write Screen Drag-and Drop&#8230;等等，很多東西都支援拖拉方式(在投影片中可以看到詳細介紹)。</p>
<p>今天用一分鐘升級好了 WP ，跑完 UPGRADE 之後第一件事情就是登入 2.7 的後台，自己體驗新設計，果然有趣又好用，選單可以折疊，Dashboard 區可以拖拉元件，而整體排版也更順眼了(但我還是喜歡 old school 的配色)，另外在 Add New Post 裡面， Publish 的選項多了一個(Stick to front page)，以後就可以不用透過 Plugin 把文章手動置頂，另外對於 ICON 的新設計我也很喜歡，不過缺點是 Hello Dolly 這個我很喜歡的 Plugins 不能用了(會很突兀)，還有，在上面的區域有個小按鈕叫做 Screen Options ，按下可以展開選單，裡面有當前頁面各個 BLOCK 的選項，只要取消和取方塊，就可以讓那個 BLOCK 消失，這是很實用的功能，因為它讓畫面乾淨了許多，我也可以把不常用的東西藏起來！   <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>目前用得很順手，這是我從桌面的截圖：<br />
<a href="http://gallery.roga.tw/d/35419-1/wp.png" rel="lightbox"><img src="http://gallery.roga.tw/d/35420-2/wp.png" alt="" /></a><br />
點小圖可以看原圖。</p>
<p>當然，如果你是 WordPress 的愛用者，那你一定得趕快下載 <a href="http://wordpress.org/development/2008/11/wordpress-27-beta-1/">WordPress 2.7 Beta 1</a> 嚐嚐鮮！保證有新體驗！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2008/11/01/1101/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.3.2 升級</title>
		<link>http://blog.roga.tw/2007/12/30/545</link>
		<comments>http://blog.roga.tw/2007/12/30/545#comments</comments>
		<pubDate>Sun, 30 Dec 2007 09:48:06 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2007/12/30/545/</guid>
		<description><![CDATA[WordPress 2.3.2 is an urgent security release that fixes a bug that can be used to expose your draft posts. 2.3.2 also suppresses some error messages that can give away information about your database table structure and limits and stops some information leaks in the XML-RPC and APP implementations. Get 2.3.2 now to protect your [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
WordPress 2.3.2 is an urgent security release that fixes a bug that can be used to expose your draft posts. 2.3.2 also suppresses some error messages that can give away information about your database table structure and limits and stops some information leaks in the XML-RPC and APP implementations. Get 2.3.2 now to protect your blog from these disclosures.</p>
<p>As a little bonus, 2.3.2 allows you to define a custom DB error page. Place your custom template at wp-content/db-error.php. If WP has a problem connecting to your database, this page will displayed rather than the default error message.</p>
<p>For more detail on what’s new in 2.3.2, view the list of fixed bugs and see the changes between 2.3.1 and 2.3.2.</p>
<p>Special thanks to <a href="http://www.buayacorp.com/">Alex Concha</a> for his help on this release.</p>
<p>From <a href="http://wordpress.org/development/2007/12/wordpress-232/">http://wordpress.org/development/2007/12/wordpress-232/</a>
</p></blockquote>
<p>今天收 RSS 發現在 11 個小時前 WP 發佈了 2.3.2 的 Release 。這次的變更是修改了一個安全性的 bug 。在 WP 的 trac 上面，有人發表了「<a href="http://trac.wordpress.org/ticket/5487">query.php mistakenly uses is_admin() to check for admin privileges.</a>」，他是在兩個禮拜前發現這個問題的，這個問題在兩天前被解決，然後，過沒多久， 2.3.2 就發佈了。</p>
<p>當然 2.3.2 還有修改了一些地方，像是改善了 XML-RPC 和 APP 的資訊暴露(Information Leaks)的問題。</p>
<p>還有，2.3.2 供了一個貼心小功能，我們可以自己修改 wp-content/db-error.php 裡面的內容，來取代原本預設的 Error Message ，如此一來日後在 DB 連線錯誤或是 Query 有問題的時候，我們可以用很幽默的方式告訴大家，這一切爆炸了  <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' /> </p>
<p>P.S. 我真的很愛 2.3 的一些工能，像是 Plugins 升級的提醒，版本升級的提醒&#8230;我真的愛死了  <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_cool.gif' alt=':cool:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2007/12/30/545/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Recent Commets 的問題</title>
		<link>http://blog.roga.tw/2007/12/21/541</link>
		<comments>http://blog.roga.tw/2007/12/21/541#comments</comments>
		<pubDate>Fri, 21 Dec 2007 12:45:28 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2007/12/21/541/</guid>
		<description><![CDATA[之前寫了一個 Plugin 用來讀取 Recents Comment ，叫做 roga’s recent comments &#8211; WordPress Plugin 。當時取出的 SQL Statements 只有考慮 comment_approved (這是有沒有被 moderate 與否) 以及 $wpdb->posts.post_status=&#8217;publish&#8217; (應該是在 2.3 之前，資料庫結構沒改，只要設了 Password ，Post 的狀態就會變成 Private， 到了 2.3 之後，就算 Post 有設定 Password, Post_Status 依然會是 Published.) 所以，我只好想個辦法，來補救這個問題。 global $wpdb, $comments, $comment; $sql = &#34;SELECT ID,comment_ID,comment_post_ID, post_title, comment_date, comment_author, comment_content &#34;; $sql .= &#34;FROM [...]]]></description>
			<content:encoded><![CDATA[<p>之前寫了一個 Plugin 用來讀取 Recents Comment ，叫做 <a href="http://blog.roga.tw/2007/09/05/493/">roga’s recent comments &#8211; WordPress Plugin</a> 。當時取出的 SQL Statements 只有考慮 comment_approved (這是有沒有被 moderate 與否) 以及 $wpdb->posts.post_status=&#8217;publish&#8217; (應該是在 2.3 之前，資料庫結構沒改，只要設了 Password ，Post 的狀態就會變成 Private， 到了 2.3 之後，就算 Post 有設定 Password, Post_Status 依然會是 Published.)</p>
<p>所以，我只好想個辦法，來補救這個問題。</p>
<p><span id="more-541"></span></p>
<pre class="brush: php;">
    global $wpdb, $comments, $comment;

	$sql = &quot;SELECT ID,comment_ID,comment_post_ID, post_title, comment_date, comment_author, comment_content &quot;;
    $sql .= &quot;FROM $wpdb-&gt;comments,$wpdb-&gt;posts WHERE $wpdb-&gt;posts.ID=$wpdb-&gt;comments.comment_post_ID &quot;;
	$sql .= &quot;AND comment_approved='1' AND $wpdb-&gt;posts.post_status='publish' ORDER BY $wpdb-&gt;comments.comment_date DESC LIMIT $comment_num&quot;;

    $comments=$wpdb-&gt;get_results($sql);

	foreach ($comments as $comment)
{
//開始把結果 assign 給變數
}
</pre>
<p>但是這樣會有一個很大的麻煩，就是選取 Recent Comments 的時候，會把被 Protected 的 Comments 一起 excerpt 出來。所以只好再多加一個條件下去查詢。</p>
<p><strong>AND $wpdb->posts.post_password=&#8221;</strong></p>
<p>// 在 WHERE 後面把這個條件一起 AND 進去就可以了。</p>
<p>另外， WordPress 內建的 Widget (Recent Comment)很巧妙的避掉了這個問題，因為他只會讀取標題，而標題就是 Protect: Title ，所以不會顯示 Comment 內文。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2007/12/21/541/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>roga&#8217;s recent comments &#8211; WordPress Plugin</title>
		<link>http://blog.roga.tw/2007/09/05/493</link>
		<comments>http://blog.roga.tw/2007/09/05/493#comments</comments>
		<pubDate>Tue, 04 Sep 2007 22:41:16 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2007/09/05/493/</guid>
		<description><![CDATA[因為 WordPress 內建 wp-include/widgets.php 的 recent-comments 不會顯示該筆 comment 的內容，為了不破壞 WordPress 的完整性，所以我決定自己寫一個 Widget ，然後用 Plugin 的方式載入，這樣可以不用動到 Theme ，又能自訂參數(標題、回應筆數、以及回應摘要字數)。 這個程式主要是參考 WordPress 的 widgets.php 和兩個 Recent Comments Plugins (包含了 bdp-comments 以及 Recent Comments and Trackbacks) 還有官方的 Codex 。 功能說明： 可以直接從後台修改 Widget 設定，分別是標題、「顯示回應數目」以及「回應長度」 顯示 Comment (回應)， Trackback(接收到的引用通知), Pingback(發送的引用通知) 支援直接在 sidebar 插入：&#60;?php roga_recent_comments(5,50) ?&#62; ，表示顯示 5 筆回應，每筆回應有 50 個字。 安裝步驟： [...]]]></description>
			<content:encoded><![CDATA[<p>因為 WordPress 內建 wp-include/widgets.php 的 recent-comments 不會顯示該筆 comment 的內容，為了不破壞 WordPress 的完整性，所以我決定自己寫一個 Widget ，然後用 Plugin 的方式載入，這樣可以不用動到 Theme ，又能自訂參數(標題、回應筆數、以及回應摘要字數)。</p>
<p>這個程式主要是參考 WordPress 的 widgets.php 和兩個 Recent Comments Plugins (包含了 <a href="http://www.ozpolitics.info/blog/wordpress-plugins/">bdp-comments</a> 以及 <a href="http://blog.chweng.idv.tw/wordpress/recent-comments-and-trackbacks">Recent Comments and Trackbacks</a>) 還有官方的 <a href="http://codex.wordpress.org/Main_Page">Codex</a> 。</p>
<p>功能說明：</p>
<ol>
<li>可以直接從後台修改 Widget 設定，分別是標題、「顯示回應數目」以及「回應長度」</li>
<li>顯示 Comment (回應)， Trackback(接收到的引用通知), Pingback(發送的引用通知)</li>
<li>支援直接在 sidebar 插入：&lt;?php roga_recent_comments(5,50) ?&gt; ，表示顯示 5 筆回應，每筆回應有 50 個字。</li>
</ol>
<p>安裝步驟：</p>
<ol>
<li>使用 ftp 將檔案上傳到 wp-content/plugins/ 目錄內</li>
<li>登入 WordPress 後台</li>
<li>啟用 roga-recent-comments Plugin</li>
<li>在佈景主題的 Widget 可以進行修改</li>
</ol>
<p><span id="more-493"></span></p>
<p>Cause of the widget &#8220;recent-comment&#8221; that WordPress provided couldn&#8217;t show the commet content, so I decided to write one plugin and make it widgetable. You can set the number of comments ,how many words to excerpt and title in the control panel.</p>
<p>About this widget, I&#8217;ve learned some useful skill from <a href="http://www.ozpolitics.info/blog/wordpress-plugins/">bdp-comments</a> 以及 <a href="http://blog.chweng.idv.tw/wordpress/recent-comments-and-trackbacks">Recent Comments and Trackbacks</a>. Thanks Them.</p>
<p>Functions:</p>
<ol>
<li>Modify the &#8220;number of comments&#8221; ,&#8221;how many words to excerpt&#8221;, and &#8220;title&#8221; in the control panel.</li>
<li>show Comments. Trackback or Pingbacks.</li>
<li>Support insert the statement: &lt;?php roga_recent_comments(5,50) ?&gt; &#8220;Directly&#8221;, this example means &#8220;roga-recent-comment&#8221; will retrieve 5 recent comments, and excerpt 50 characters.</li>
</ol>
<p>Installation:</p>
<ol>
<li>Upload the file to wp-content/plugins/ via FTP</li>
<li>Login in your WordPress control panel</li>
<li>Activate the roga-recent-comments Plugin</li>
<li>You can modify it in Presentation -&gt; Widgets.</li>
</ol>
<p><strong>備註：本簡短程式採用 GPLv2 授權：「歡迎隨意使用，當重新散佈或修改的時候請同時公佈原始碼。」</strong></p>
<p>下面是原始程式，複製下來貼成一個 PHP 檔即可。</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: roga-recent-comments
Plugin URI: http://blog.roga.tw/2007/09/05/493/
Version: 0.0.2 (widget)
Author: roga
Author URI: http://blog.roga.tw
Description: widgetized and configurable recent comments plug-in.
*/

function roga_recent_comments($comment_num,$excerp_length) {

    global $wpdb, $comments, $comment;

	$sql = &quot;SELECT ID,comment_ID,comment_post_ID, post_title, comment_date, comment_author, comment_content &quot;;
    $sql .= &quot;FROM $wpdb-&gt;comments,$wpdb-&gt;posts WHERE $wpdb-&gt;posts.ID=$wpdb-&gt;comments.comment_post_ID &quot;;
	$sql .= &quot;AND comment_approved='1' AND $wpdb-&gt;posts.post_status='publish' AND $wpdb-&gt;posts.post_password='' ORDER BY $wpdb-&gt;comments.comment_date DESC LIMIT $comment_num&quot;;

    $comments=$wpdb-&gt;get_results($sql);

	foreach ($comments as $comment)
    {
        $comment_author = stripslashes($comment-&gt;comment_author);
        $comment_content = stripslashes($comment-&gt;comment_content);

        $comment_content = strip_tags(str_replace('&amp;#8230;', '.', $comment_content));
        $comment_excerpt = mb_substr($comment_content, 0, $excerp_length, get_bloginfo('charset'));
        $comment_excerpt.= '...';

		$permalink=get_permalink($comment-&gt;ID).&quot;#comment-&quot;.$comment-&gt;comment_ID;

        if($comment_author==&quot;roga&quot;)
          echo &quot;&lt;li&gt; &lt;strong&gt;$comment_author&lt;/strong&gt; :&amp;nbsp;&amp;nbsp;&lt;a href=\&quot;$permalink\&quot;&gt;$comment_excerpt&lt;/a&gt;&amp;nbsp;&lt;/li&gt;\n&quot;;
        else
          echo &quot;&lt;li&gt; $comment_author :&amp;nbsp;&amp;nbsp;&lt;a href=\&quot;$permalink\&quot;&gt;$comment_excerpt&lt;/a&gt;&amp;nbsp;&lt;/li&gt;\n&quot;;
	}
}

function widget_roga_recent_comments($args) {
    extract($args);

    /* 取得在 widget 儲存的選項 */

    $options = get_option('widget_roga_recent_comments');

    /* 取得 title、 */

    $title = (isset($options['title']) &amp;&amp; $options['title']) ? $options['title'] : __('Recent Comments');
    $comment_num = (isset($options['comment_num']) &amp;&amp; $options['comment_num']) ? (int) $options['comment_num'] : 15;
	$excerpt_length = (isset($options['excerpt_length']) &amp;&amp; $options['excerpt_length']) ? (int) $options['excerpt_length'] : 15;

    /* 處理限制字串的長度 */

    if ( $comment_num &lt; 1 )
        $comment_num = 1;
	elseif ( $comment_num &gt; 40 )
        $comment_num = 40;

	if ( $excerpt_length &lt; 0 )
		$excerpt_length = 0;
	elseif ( $excerpt_length &gt; 40 )
		$excerpt_length = 40;

    /* 讀取 comment 資料表 */

    echo $before_widget;
    echo $before_title . $title . $after_title;
	echo &quot;&lt;ul&gt;\n&quot;;
    roga_recent_comments($comment_num, $excerpt_length);
    echo &quot;&lt;/ul&gt;\n&quot;;
    echo $after_widget;
}

function widget_roga_recent_comments_control()
{
	$options = $newoptions = get_option('widget_roga_recent_comments');

	if ( isset($_POST['roga-submit']) )
	{
		$newoptions['title'] = strip_tags(stripslashes($_POST['roga-title']));
		$newoptions['comment_num'] = (int) $_POST['roga-number'];
		$newoptions['excerpt_length'] = (int) $_POST['roga-length'];
	}

	if ( $options != $newoptions )
	{
		$options = $newoptions;
		update_option('widget_roga_recent_comments', $options);
	}

	$title = attribute_escape($options['title']);
	$comment_num = ($options['comment_num'] ? $options['comment_num']  : 5);
	$excerpt_length = ($options['excerpt_length'] ? $options['excerpt_length']  : 40);

?&gt;
	&lt;p&gt;標題：&lt;input name=&quot;roga-title&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $title; ?&gt;&quot; size=&quot;20&quot; /&gt;&lt;/p&gt;
	&lt;p&gt;列出回應筆數：&lt;input name=&quot;roga-number&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $comment_num; ?&gt;&quot; size=&quot;5&quot; /&gt; 最多 40 筆&lt;/p&gt;
	&lt;p&gt;顯示回應字數：&lt;input name=&quot;roga-length&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $excerpt_length; ?&gt;&quot; size=&quot;5&quot; /&gt; 最多 40 字&lt;/p&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;roga-submit&quot; value=&quot;1&quot; /&gt;
&lt;?php
}

function widget_roga_comments_init()
{
	if(function_exists('register_sidebar_widget'))
		register_sidebar_widget('roga Comments', 'widget_roga_recent_comments');
	if(function_exists('register_widget_control'))
		register_widget_control('roga Comments', 'widget_roga_recent_comments_control', 500, 200);
}

add_action('plugins_loaded', 'widget_roga_comments_init');
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2007/09/05/493/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>慎選 Domain Name</title>
		<link>http://blog.roga.tw/2007/08/19/487</link>
		<comments>http://blog.roga.tw/2007/08/19/487#comments</comments>
		<pubDate>Sun, 19 Aug 2007 13:02:35 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2007/08/19/487</guid>
		<description><![CDATA[之前我開了一個新的 blog ，取名為 Write It Down ， 原本只想紀錄一下瑣碎的一些感想，但是由於後來手癢，所以我寫了一隻小程式把我以前在 BBS 上面的日記，全部都轉換成 UTF-8 編碼，然後利用 XMLRPC 呼叫把所有文章都倒進去 Write It Down 的資料庫內 。 這麼一來，我的隨手雜記就變成了歷年日記，所以我就只好把 blog 的 title 改為 roga&#8217;s diary ，然後 Write It Down 變成了 Description 。 在取 Domain 的時候，由於不是定位為日記，所以自然是取名為 write.roga.tw 。 後來改為 diary.roga.tw 的時候，也僅是把 diary 設成 write 的 CNAME 而已。不過我發現一些問題，就是當我想要執行某些 Ajax 的小玩意兒的時候，不同的 Domain Name 會造成無法存取。所以，我除了把整個 WP 的 base [...]]]></description>
			<content:encoded><![CDATA[<p>之前我開了一個新的 blog ，取名為 Write It Down ， 原本只想紀錄一下瑣碎的一些感想，但是由於後來手癢，所以我寫了一隻小程式把我以前在 BBS 上面的日記，全部都轉換成 UTF-8 編碼，然後利用 XMLRPC 呼叫把所有文章都倒進去 Write It Down 的資料庫內 。 <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>這麼一來，我的隨手雜記就變成了歷年日記，所以我就只好把 blog 的 title 改為 roga&#8217;s diary ，然後 Write It Down 變成了 Description 。</p>
<p><span id="more-487"></span></p>
<p>在取 Domain 的時候，由於不是定位為日記，所以自然是取名為 write.roga.tw 。 後來改為 diary.roga.tw 的時候，也僅是把 diary 設成 write 的 CNAME 而已。不過我發現一些問題，就是當我想要執行某些 Ajax 的小玩意兒的時候，不同的 Domain Name 會造成無法存取。所以，我除了把整個 WP 的 base url 都改為 diary.roga.tw 以外，我也修改了 WP root dir 下面的 index.php  <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_confused.gif' alt=':???:' class='wp-smiley' /> </p>
<pre>
index.php:

/* Short and sweet */

if(strtolower($_SERVER['HTTP_HOST']) == 'write.roga.tw')
        header("location: http://diary.roga.tw");
else
{
        define('WP_USE_THEMES', true);
        require('./wp-blog-header.php');
}
</pre>
<p>檢查 Domain Name 是否正確，如果是不理想的，那就送一個 Header 出去，強迫瀏覽器 Redirection 一下。</p>
<p><strong>最後 roga&#8217;s diary 的 RSS Feed 也必須要重新 subscribe 。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2007/08/19/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comments 的排序</title>
		<link>http://blog.roga.tw/2006/09/19/317</link>
		<comments>http://blog.roga.tw/2006/09/19/317#comments</comments>
		<pubDate>Tue, 19 Sep 2006 05:03:06 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2006/09/19/317</guid>
		<description><![CDATA[剛剛有人問我怎麼把 comments 的排序顛倒過來( WP 的預設是越晚發表的排在越下面，越早發表的排在越上面) ，但是她希望把早發表的排在下面，把晚發表的排在上面，就像我們一般常見的 WEB 留言板一樣。所以我就翻了一下 WP 的程式看看到底要改哪邊才會有效果。我原本以為 select comment 的敘述應該是放在 theme 裡面，但是後來我發現我想的太單純了，因為如果放在 theme 裡面好像有點不太合乎邏輯。結果， WP 果然不會做不合邏輯的煞情，所以其實那段 SQL 語法是放在 wp-includes 裡面的 comment-functions.php 。 如果要 comments 排序顛倒，那就開啟 comment-function 然後搜尋以下程式碼 (在開頭的地方) if ( empty($comment_author) ) { $comments = $wpdb-&#62;get_results(&#34;SELECT * FROM $wpdb-&#62;comments WHERE comment_post_ID = '$post-&#62;ID' AND comment_approved = '1' ORDER BY comment_date DESC&#34;); // [...]]]></description>
			<content:encoded><![CDATA[<p>剛剛有人問我怎麼把 comments 的排序顛倒過來(  WP 的預設是越晚發表的排在越下面，越早發表的排在越上面) ，但是她希望把早發表的排在下面，把晚發表的排在上面，就像我們一般常見的 WEB 留言板一樣。所以我就翻了一下 WP 的程式看看到底要改哪邊才會有效果。我原本以為 select comment 的敘述應該是放在 theme 裡面，但是後來我發現我想的太單純了，因為如果放在 theme 裡面好像有點不太合乎邏輯。結果， WP 果然不會做不合邏輯的煞情，所以其實那段 SQL 語法是放在 wp-includes 裡面的 comment-functions.php 。</p>
<p>如果要 comments 排序顛倒，那就開啟 comment-function 然後搜尋以下程式碼 (在開頭的地方)</p>
<pre class="brush: php;">
if ( empty($comment_author) ) {
    $comments = $wpdb-&gt;get_results(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_post_ID = '$post-&gt;ID' AND comment_approved = '1' ORDER BY comment_date DESC&quot;); // DESC 排列
}
else {
    $author_db = $wpdb-&gt;escape($comment_author);
    $email_db  = $wpdb-&gt;escape($comment_author_email);
    $comments = $wpdb-&gt;get_results(&quot;SELECT * FROM $wpdb-&gt;comments WHERE comment_post_ID = '$post-&gt;ID' AND ( comment_approved = '1' OR ( comment_author = '$author_db' AND comment_author_email = '$email_db' AND comment_approved = '0' ) ) ORDER BY comment_date DESC&quot;); // DESC 排列
}
</pre>
<p>但這樣改有個問題，就是以後每次 UPDATE 都得手動修改這個檔案 SQL 語法，呵呵。</p>
<p>所以其實我不太愛改除了 wp-content/ 目錄之外的檔案，因為每次升級我又得再改一次，有點麻煩是也 <img src='http://blog.roga.tw/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/09/19/317/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Theme</title>
		<link>http://blog.roga.tw/2006/09/11/311</link>
		<comments>http://blog.roga.tw/2006/09/11/311#comments</comments>
		<pubDate>Sun, 10 Sep 2006 22:46:34 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2006/09/11/311</guid>
		<description><![CDATA[我終於完全擺脫了 table 排版了！ 之前這個版面，整體的排版其實是靠 table 強制排起來的，但是我始終覺得，沒有用 CSS 來排版就遜掉！所以我花了大約三個小時的時間，把我的 Theme 全部用 CSS 改寫。不過我 CSS 的功力還不夠強，所以寫的很醜，很多地方都用 width: ***px; 來強制限制住了，所以視窗如果縮小的話，其實是會看到捲軸的.. 不過..經過了半個夜晚的奮戰， 我只能說：完成的那瞬間，我真的很爽！]]></description>
			<content:encoded><![CDATA[<p>我終於完全擺脫了 table 排版了！</p>
<p>之前這個版面，整體的排版其實是靠 table 強制排起來的，但是我始終覺得，沒有用 CSS 來排版就遜掉！所以我花了大約三個小時的時間，把我的 Theme 全部用 CSS 改寫。不過我 CSS 的功力還不夠強，所以寫的很醜，很多地方都用 width: ***px; 來強制限制住了，所以視窗如果縮小的話，其實是會看到捲軸的..</p>
<p>不過..經過了半個夜晚的奮戰，</p>
<p>我只能說：完成的那瞬間，我真的很爽！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/09/11/311/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>翠谷風情網路日誌</title>
		<link>http://blog.roga.tw/2006/09/07/308</link>
		<comments>http://blog.roga.tw/2006/09/07/308#comments</comments>
		<pubDate>Wed, 06 Sep 2006 17:18:45 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2006/09/07/308</guid>
		<description><![CDATA[這是一個和 BBS 帳號結合的日誌。資料庫採用 MySQL ，程式語言是 PHP ，網頁伺服器是 Apache 。 軟體系統的核心是 Lyceum ，認證方面則採用了 whatup 所寫的 pop3 auth 的 plugin， whatup 是個對 Lyceum 和 WordPress 很有研究的人，他自己本身的 blog 就是採用 Lyceum 這套系統。 另外再新增佈景主題方面，特別謝謝 cating 幫我一起修改 WordPress 的佈景主題到系統上，目前總共有 72 個佈景， Cating 大概幫忙修改了一半。也謝謝他女朋友 Mandy 幫忙選擇值得一改的佈景主題。 翠谷風情網路日誌的網址：http://bbs.shu.edu.tw 妳必須要有翠谷風情 BBS 的帳號才能申請使用。 像是我的：http://roga.bbs.shu.edu.tw]]></description>
			<content:encoded><![CDATA[<p>這是一個和 BBS 帳號結合的日誌。資料庫採用 MySQL ，程式語言是 PHP ，網頁伺服器是 Apache 。</p>
<p>軟體系統的核心是<a href="http://lyceum.ibiblio.org/" target="_new"> Lyceum </a>，認證方面則採用了 <a href="http://blog.twkang.net/" target="_new">whatup</a> 所寫的 pop3 auth 的 plugin， <a href="http://blog.twkang.net/" target="_new">whatup</a> 是個對 <a href="http://lyceum.ibiblio.org/" target="_new">Lyceum</a> 和 <a href="http://www.wordpress.org" target="_new">WordPress</a> 很有研究的人，他自己本身的 blog 就是採用 Lyceum 這套系統。</p>
<p>另外再新增佈景主題方面，特別謝謝<a href="http://blog.cating.tw" target="_new"> cating </a> 幫我一起修改 WordPress 的佈景主題到系統上，目前總共有 72 個佈景， Cating 大概幫忙修改了一半。也謝謝他女朋友 Mandy 幫忙選擇值得一改的佈景主題。</p>
<p>翠谷風情網路日誌的網址：<a href="http://bbs.shu.edu.tw" target="_new">http://bbs.shu.edu.tw</a></p>
<p>妳必須要有<a href="telnet://bbs.shu.edu.tw">翠谷風情 BBS </a>的帳號才能申請使用。</p>
<p>像是我的：<a href="http://roga.bbs.shu.edu.tw" target="_new">http://roga.bbs.shu.edu.tw</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/09/07/308/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一個 HTTP Header 的問題..</title>
		<link>http://blog.roga.tw/2006/09/03/307</link>
		<comments>http://blog.roga.tw/2006/09/03/307#comments</comments>
		<pubDate>Sat, 02 Sep 2006 21:33:06 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/2006/09/03/307</guid>
		<description><![CDATA[是這樣的，我剛剛修改我之前在某篇遊記的 comment ，結果發現 wp-admin/post.php 會跑出一頁新的東西來讓妳確認是否要修改 comment 的內容，我當下很直覺的就按了確定，但卻發現編輯好的 comment 存到資料庫後卻變成亂碼，所以我重複了一次我的動作，並且看了一下程式產生的原始碼，想知道是哪邊出了問題，找了半天，發現是 wp-includes/functions.php 這邊送出處理的。而裡面有個 function 叫做 nocache_headers()，負責處理 no cache 的 header 的部份。 我把這個小程式把節錄如下： function nocache_headers() { @ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT'); @ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); @ header('Cache-Control: no-cache, must-revalidate, max-age=0'); @ header('Pragma: no-cache'); @ header(&#34;Content-Type:text/html;charset=utf-8&#34;); // 新加入這行 [...]]]></description>
			<content:encoded><![CDATA[<p>是這樣的，我剛剛修改我之前在某篇遊記的 comment ，結果發現 wp-admin/post.php 會跑出一頁新的東西來讓妳確認是否要修改 comment 的內容，我當下很直覺的就按了確定，但卻發現編輯好的 comment 存到資料庫後卻變成亂碼，所以我重複了一次我的動作，並且看了一下程式產生的原始碼，想知道是哪邊出了問題，找了半天，發現是 wp-includes/functions.php 這邊送出處理的。而裡面有個 function 叫做 nocache_headers()，負責處理 no cache 的 header 的部份。</p>
<p>我把這個小程式把節錄如下：</p>
<pre class="brush: php;">
function nocache_headers()
{
        @ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
        @ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
        @ header('Cache-Control: no-cache, must-revalidate, max-age=0');
        @ header('Pragma: no-cache');
        @ header(&quot;Content-Type:text/html;charset=utf-8&quot;);  // 新加入這行
}
</pre>
<p>UPDATE: 2006/09/04<br />
另外我補充一下，這個問題發生在 WordPress 2.0.3，升級到 2.0.4 之後就沒有遇到這個問題了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/09/03/307/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Lyceum Project</title>
		<link>http://blog.roga.tw/2006/08/19/301</link>
		<comments>http://blog.roga.tw/2006/08/19/301#comments</comments>
		<pubDate>Sat, 19 Aug 2006 09:05:20 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=301</guid>
		<description><![CDATA[The Lyceum Project &#8211; http://lyceum.ibiblio.org/ The Lyceum Project 是一個多人版本的 Blog 系統，是基於 WordPress 的基礎開發的。現在我已經完全裝好了，各種設定也弄好了，只剩下一些使用者的部份需要修改，所以我想應該可以先上線了。如果你是舊的翠谷風情網誌系統的使用者，那妳可以透過 RSS 的方式把舊的文章匯入到新的 BLOG 。如果你是新的使用者，那麼只要遵照指示就可以使用。至於該如何匯入舊的 RSS 呢？請見文末解說。 (我現在比較不想寫 documents ，所以我打算先把這東西裝好，讓既有的使用者可以穩定使用即可。) 登入之後，系統不會自動建立新的網誌，妳必須找尋網頁最右上角，看到一個連結「Create a new blog」，按下之後會進入建立新網誌的頁面，這時候再輸入密碼確認即可新增一個屬於自己的 blog ，然後一個人只能建立一個 blog 。 FAQ: 1: 為什麼可用的佈景主題只有一個？ A: 因為要裝上新的佈景主題，必須要先修改佈景主題的程式，我只要有空就會增加新的佈景主題。 2. 為什麼有些地方是中文有些地方是英文？ A: 因為這是外國的東西，中文化並不是很齊全，後台管理的部份目前應該都是中文了，至於部落格的前台介面，如果有出現英文是 200% 正常的，目前中文化的語系是由台灣的自由軟體鑄造場提供，維護管理員為：Piaip 和 Zonble，Lyceum 多國語系的 Plugin 為 whatup 撰寫。 3. 將來有問題要怎麼回報？ A: 試著聯絡我看看吧。 4. 這個使用介面不習慣，我已經習慣之前翠谷用的 LifeType [...]]]></description>
			<content:encoded><![CDATA[<p>The Lyceum Project &#8211; <a href="http://lyceum.ibiblio.org/">http://lyceum.ibiblio.org/</a></p>
<p>The Lyceum Project 是一個多人版本的 Blog 系統，是基於 WordPress 的基礎開發的。現在我已經完全裝好了，各種設定也弄好了，只剩下一些使用者的部份需要修改，所以我想應該可以先上線了。如果你是舊的<a href="http://blog.bbs.shu.edu.tw" target=_blank>翠谷風情網誌系統</a>的使用者，那妳可以透過 RSS 的方式把舊的文章匯入到新的 BLOG 。如果你是新的使用者，那麼只要遵照指示就可以使用。至於該如何匯入舊的 RSS 呢？請見文末解說。</p>
<p><span id="more-301"></span></p>
<p>(我現在比較不想寫 documents ，所以我打算先把這東西裝好，讓既有的使用者可以穩定使用即可。)</p>
<p>登入之後，系統不會自動建立新的網誌，妳必須找尋網頁最右上角，看到一個連結「Create a new blog」，按下之後會進入建立新網誌的頁面，這時候再輸入密碼確認即可新增一個屬於自己的 blog ，然後一個人只能建立一個 blog 。</p>
<p>FAQ:<br />
1: 為什麼可用的佈景主題只有一個？<br />
A: 因為要裝上新的佈景主題，必須要先修改佈景主題的程式，我只要有空就會增加新的佈景主題。</p>
<p>2. 為什麼有些地方是中文有些地方是英文？<br />
A: 因為這是外國的東西，中文化並不是很齊全，後台管理的部份目前應該都是中文了，至於部落格的前台介面，如果有出現英文是 200% 正常的，目前中文化的語系是由台灣的<a href="http://rt.openfoundry.org" target=_blank>自由軟體鑄造場</a>提供，維護管理員為：<a href="http://www.csie.ntu.edu.tw/~piaip/" target=_blank>Piaip</a> 和 <a href="http://zonble.twbbs.org" target=_blank>Zonble</a>，Lyceum 多國語系的 Plugin 為<a href="http://blog.twkang.net/" target="_blank"> whatup 撰寫。</a></p>
<p>3. 將來有問題要怎麼回報？<br />
A: 試著聯絡我看看吧。</p>
<p>4. 這個使用介面不習慣，我已經習慣之前翠谷用的 LifeType 了。<br />
A: 雖然我裝了 LifeType ，但是我維護 LifeType 也不太習慣，改 Lyceum 是為了我後續維護方便，除非你不想要人維護。</p>
<p>5. 如果我想要新的佈景主題，那我要去哪邊找？<br />
A: 請到 <a href="http://www.wordpress.org" target="_blank">wordpress.org</a> 的 Extend 分類搜尋佈景主題的網站列表，然後進去挑，挑好了再跟我說網址，我會修改到 Lyceum 上面。</p>
<p>6. 如何透過 RSS 匯入舊有文章？<br />
A:</p>
<p>1. 先從<a href="http://blog.im.shu.edu.tw" "target=_blank"> blog.im.shu.edu.tw </a>按下 Login 登入，請注意，妳必須要有翠谷風情 BBS 的帳號密碼才能登入(或是先從翠谷風情 BBS 註冊一個新帳號)，本系統不接受網頁方式的註冊。</p>
<p>2. 回到妳舊的網誌，找到 RSS 2.0 的按鈕，按下去，會出現一頁 RSS 的畫面，這時候請將這一頁 RSS 另存新檔，之後在新系統登入，選擇「匯入」，再選擇「Import posts from an RSS feed」，這樣就可以從本地端上傳檔案匯入了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/08/19/301/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extended Live Archives</title>
		<link>http://blog.roga.tw/2006/04/29/227</link>
		<comments>http://blog.roga.tw/2006/04/29/227#comments</comments>
		<pubDate>Fri, 28 Apr 2006 18:19:35 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=227</guid>
		<description><![CDATA[我很喜歡一個 plugin 叫做 Extended Live Archives因為某些需求，我同時使用 Internet Explorer 7 beta 2 以及 Firefox 1.5 兩個瀏覽器。我發現在 Internet Explorer 7 beta 2 ，沒辦法處理 E.L.A. 的 Ajax Request (XMLHTTPRequest) 我個人很直覺的認為：「IE 7 beta 2 真爛，儘管他只是個 beta 版本的東西」 一點也不覺得應該有可能是 E.L.A. 的 bug (對，我超偏心的) 另外，我很討厭 classic menu 不能放到「上一頁」、「下一頁」和「網址列」的上面，這完全顛覆了我的視覺習慣。 總之這一切這讓我很不爽，除了他對 CSS 的支援有好很多之外..其他實在沒有長足的進步。微軟的東西不能想辦法做好一點嗎？ Internet Explorer 7 beta 2 下載試用 (想玩的可以試試看) 但我依然要聲明他只是個 beta 的玩意兒。]]></description>
			<content:encoded><![CDATA[<p>我很喜歡一個 plugin 叫做 <a href="http://www.sonsofskadi.net/extended-live-archive/" target=_new>Extended Live Archives</a>因為某些需求，我同時使用 Internet Explorer 7 beta 2 以及 Firefox 1.5 兩個瀏覽器。我發現在 Internet Explorer 7 beta 2 ，沒辦法處理 E.L.A. 的 Ajax Request (XMLHTTPRequest)</p>
<p><span id="more-227"></span></p>
<p>我個人很直覺的認為：「IE 7 beta 2 真爛，儘管他只是個 <strong>beta</strong> 版本的東西」</p>
<p>一點也不覺得應該有可能是 E.L.A. 的 bug (對，我超偏心的) 另外，我很討厭 classic menu 不能放到「上一頁」、「下一頁」和「網址列」的上面，這完全顛覆了我的視覺習慣。</p>
<p>總之這一切這讓我很不爽，除了他對 CSS 的支援有好很多之外..其他實在沒有長足的進步。微軟的東西不能想辦法做好一點嗎？</p>
<p><a href="http://www.microsoft.com/windows/ie/downloads/default.mspx">Internet Explorer 7 beta 2 下載試用 (想玩的可以試試看)</a></p>
<p>但我依然要聲明他只是個 beta 的玩意兒。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/04/29/227/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>麻煩的事情</title>
		<link>http://blog.roga.tw/2006/04/29/225</link>
		<comments>http://blog.roga.tw/2006/04/29/225#comments</comments>
		<pubDate>Fri, 28 Apr 2006 17:45:01 +0000</pubDate>
		<dc:creator>roga</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.roga.tw/?p=225</guid>
		<description><![CDATA[WHATUP 發表了一篇文章叫做 如何實做一個 Widget ，滿實用的一篇教學文章； 現在翠谷的 LifeType + BBS 就使用了 WHATUP 的 PATCH ，真的很謝謝他。 WHATUP 曾在他的網誌的 comment 裡面提到她想弄一個 lyceum + BBS 連結，當時我超級高興的，不過似乎因為他回應系統的問題，我沒辦法送出回應，所以當時就沒在他的 blog 講。 很期待可以早日看到 lyceum + BBS 認證，因為我始終很不習慣 LifeType 的程式，尤其是 LifeType 寫作方法，讓我讀起來很吃力 (當然，一個大型系統，這樣寫法是相當正確的，因為才能將樣版、核心、抽離開來分開來維護。) 嗯..嗯..唉呀，說了這麼多，沒個頭緒，真混亂 orz]]></description>
			<content:encoded><![CDATA[<p>WHATUP 發表了一篇文章叫做  <a href="http://blog.twkang.net/2006/04/27/%e5%a6%82%e4%bd%95%e5%af%a6%e4%bd%9c%e4%b8%80%e5%80%8b-widget/" target="_new">如何實做一個 Widget </a> ，滿實用的一篇教學文章；</p>
<p>現在翠谷的 <a href="http://blog.bbs.shu.edu.tw">LifeType + BBS</a> 就使用了 WHATUP 的 PATCH ，真的很謝謝他。</p>
<p>WHATUP 曾在他的網誌的 comment 裡面提到她想弄一個 lyceum + BBS <a href="http://0rz.net/091jG" target="_new">連結</a>，當時我超級高興的，不過似乎因為他回應系統的問題，我沒辦法送出回應，所以當時就沒在他的 blog 講。</p>
<p>很期待可以早日看到 lyceum + BBS 認證，因為我始終很不習慣 LifeType 的程式，尤其是 LifeType 寫作方法，讓我讀起來很吃力 (當然，一個大型系統，這樣寫法是相當正確的，因為才能將樣版、核心、抽離開來分開來維護。)</p>
<p>嗯..嗯..唉呀，說了這麼多，沒個頭緒，真混亂  orz</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.roga.tw/2006/04/29/225/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
