<?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>我爱水煮鱼&#187; Widget</title>
	<atom:link href="http://fairyfish.net/tag/widget/feed/" rel="self" type="application/rss+xml" />
	<link>http://fairyfish.net</link>
	<description>关注 WordPress，关注互联网</description>
	<lastBuildDate>Tue, 22 May 2012 15:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>WordPress 插件推荐：Quick Press Widget</title>
		<link>http://fairyfish.net/2008/12/08/quick-press-widget/</link>
		<comments>http://fairyfish.net/2008/12/08/quick-press-widget/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 14:48:10 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordPress 插件]]></category>

		<guid isPermaLink="false">http://fairyfish.net/?p=1798</guid>
		<description><![CDATA[Quick Press Widget 能够让你给主题添加一个快速发表文章的 Widget，让你不用进入 WordPress 后台即可发表文章。]]></description>
			<content:encoded><![CDATA[<p><a href="http://dreamcolor.net/">Dreamcolor</a> 做出了他的第一个 WordPress 插件 <a href="http://dreamcolor.net/2008/12/quick-press-widget/">Quick Press Widget</a>，我比他更高兴， <img src='http://fairyfish.b0.upaiyun.com/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  于是推荐之。<br />
<span id="more-1798"></span><br />
Quick Press Widget 能够让你给主题添加一个快速发表文章的 Widget，让你不用进入 WordPress 后台即可发表文章。</p>
<p>该插件代码基本上照搬了 Prologue 这个主题的文章发布部分的代码。进行了少量修改。加入了自定义标题的功能（那个主题是截取文章前多少个字作为文章标题，有的时候标题链接会非常恶心）。其他的代码参考了几款有侧栏功能的插件抄过来的。暂时测试没啥毛病。</p>
<p>插件的使用方法也非常简单，解压缩上传，在后台启动插件以后，然后在主题的 Widgets 管理界面会看到新加了一个“Quick Press Widget”单元。把它拖过去就行了，没有什么可以设置的东西。保存后刷新首页就可以看到这个东西了。</p>
<p style="text-align: center;"><img src="http://dreamcolor.net/wp-content/uploads/2008/12/quick-press-widget.jpg" alt="Quick Press Widget" /><br />
Quick Press Widget 界面</p>
<p>插件可以在这里下载：<a href="http://code.google.com/p/wpcn/downloads/detail?name=quick-press-widget.1.0.zip&#038;can=2&#038;q=#makechanges">Quick Press Widget</a>。</p>
<p>&gt;&gt;&gt;<a href="http://fairyfish.net/2008/12/08/quick-press-widget/" title="WordPress 插件推荐：Quick Press Widget">继续阅读全文</a> ...</p><hr /><p><a href="http://s.click.taobao.com/t_8?e=7HZ5x%2BOzcBqQvUL9HREWEoUWa1c%3D&p=mm_25083601_0_0" rel="nofollow"><img src="http://fairyfish.net/wp-content/banner/notyet.gif"></a></p>
<p>
&copy; <a href="http://fairyfish.net/" title="我爱水煮鱼">我爱水煮鱼</a>
 / <a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2008/12/08/quick-press-widget/&title=WordPress+%E6%8F%92%E4%BB%B6%E6%8E%A8%E8%8D%90%EF%BC%9AQuick+Press+Widget&tags=Widget, WordPress 插件, "  title="WordPress 插件推荐：Quick Press Widget">收藏本文</a>
 / <a href="http://fairyfish.net/2008/12/08/quick-press-widget/#comments" title="WordPress 插件推荐：Quick Press Widget">17条评论</a>
 / <a href="http://feed.fairyfish.net" title="订阅我爱水煮鱼">RSS 订阅</a>
 / <a href="http://fairyfish.net/go/wpjam" title="WordPress JAM">长期承接 WordPress 项目</a>
 / <a href="http://fairyfish.net/coupon/" title="主机域名优惠码">主机域名优惠码</a>
 / <a href="http://weibo.com/denishua/" title="新浪微博">新浪微博</a>
</p><h3>相关日志</h3><ul class="related_post"><li><a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/" title="自己动手写 WordPress 插件：窗体化插件 2">自己动手写 WordPress 插件：窗体化插件 2</a></li>
<li><a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/" title="自己动手写 WordPress 插件：窗体化插件 1">自己动手写 WordPress 插件：窗体化插件 1</a></li>
<li><a href="http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/" title="Widgetize 侧边栏的登录窗口">Widgetize 侧边栏的登录窗口</a></li>
<li><a href="http://fairyfish.net/m/appdp-list/" title="WordPress 插件：iPhone/iPad 限时免费精选">WordPress 插件：iPhone/iPad 限时免费精选</a></li>
<li><a href="http://fairyfish.net/2012/04/12/half-of-the-top-100-blogs-now-use-wordpress/" title="国外前 100 名博客半数使用 WordPress">国外前 100 名博客半数使用 WordPress</a></li>
<li><a href="http://fairyfish.net/article/duoshuo/" title="多说：最好的社会化评论服务">多说：最好的社会化评论服务</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=1505454358&amp;utmr=-&amp;utmp=%2Frss%2F2008%2F12%2F08%2Fquick-press-widget%2F&amp;utmdt=WordPress+%E6%8F%92%E4%BB%B6%E6%8E%A8%E8%8D%90%EF%BC%9AQuick+Press+Widget&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2008/12/08/quick-press-widget/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>自己动手写 WordPress 插件：窗体化插件 2</title>
		<link>http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/</link>
		<comments>http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 16:17:35 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordPress 插件]]></category>
		<category><![CDATA[WordPress 教程]]></category>
		<category><![CDATA[沙发]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/</guid>
		<description><![CDATA[上一节我们讲解了如何窗体化插件的第一部分，今天我们将继续第二部分，如何给我们创建的 Widget 创建选项 Panel。 我想使用沙发二代的同学已经感觉现在很轻松了，如果主题支持，根本不用修改模板就能调用该插件。但是最求完美的同学会发现默认输出的 Title 是“最沙发的人”。有些比较追求个性的同学总是希望自己定义标题的。好吧，这一节，我们就完成这部分同学的愿望，能够自定义标题。并推出沙发三代！ 如何自定义标题呢？其实就是在 Widget 能够提供一个选项的界面，让用户自己输入标题。好吧，搜索下或者看看别人的插件（偶经常这样写插件的，如果你的插件因此被我偷师了，算你倒霉！嘿嘿！），发现是通过 register_widget_control 这个 hook 绑定的。这样事情就变得很简单了。我们把选项的数据存储到一个名字叫做 widget_sofa option 中即可。修改如下： 在昨天创建的 widget_sidebar_sofa 的函数的最后中添加如下代码： function widget_sofa_options() { $sofa_options = $new_sofa_options = get_option('widget_sofa'); //获取数据库中的 widget_sofa if ( $_POST["sofa_submit"] ) { //如果提交更新 $new_sofa_options['title'] = strip_tags(stripslashes($_POST["sofa_title"])); if ( $sofa_options != $new_sofa_options ) { //如果有更新 $sofa_options = $new_sofa_options; update_option('widget_sofa', $sofa_options); } } $title [...]]]></description>
			<content:encoded><![CDATA[<p>上一节我们讲解了<a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/">如何窗体化插件的第一部分</a>，今天我们将继续第二部分，如何给我们创建的 Widget 创建选项 Panel。</p>
<p>我想使用沙发二代的同学已经感觉现在很轻松了，如果主题支持，根本不用修改模板就能调用该插件。但是最求完美的同学会发现默认输出的 Title 是“最沙发的人”。有些比较追求个性的同学总是希望自己定义标题的。好吧，这一节，我们就完成这部分同学的愿望，能够自定义标题。并推出沙发三代！<br />
<span id="more-1127"></span><br />
如何自定义标题呢？其实就是在 Widget 能够提供一个选项的界面，让用户自己输入标题。好吧，搜索下或者看看别人的插件（偶经常这样写插件的，如果你的插件因此被我偷师了，算你倒霉！嘿嘿！），发现是通过 <code>register_widget_control</code> 这个 hook 绑定的。这样事情就变得很简单了。我们把选项的数据存储到一个名字叫做 widget_sofa option 中即可。修改如下：</p>
<p>在昨天创建的 <code>widget_sidebar_sofa</code> 的函数的最后中添加如下代码：</p>
<pre><a style="color: #0000ff" href="http://www.php.net/function">function</a> widget_sofa_options() {
	$sofa_options = $new_sofa_options = get_option('<span style="color: #8b0000">widget_sofa</span>'); <span style="color: #008000">//获取数据库中的 widget_sofa</span>
	<a style="color: #0000ff" href="http://www.php.net/if">if</a> ( $_POST["<span style="color: #8b0000">sofa_submit</span>"] ) { <span style="color: #008000">//如果提交更新</span>
		$new_sofa_options['<span style="color: #8b0000">title</span>'] = <a style="color: #ffa500" href="http://www.php.net/strip_tags">strip_tags</a>(<a style="color: #ffa500" href="http://www.php.net/stripslashes">stripslashes</a>($_POST["<span style="color: #8b0000">sofa_title</span>"]));
		<a style="color: #0000ff" href="http://www.php.net/if">if</a> ( $sofa_options != $new_sofa_options ) { <span style="color: #008000">//如果有更新</span>
			$sofa_options = $new_sofa_options;
			update_option('<span style="color: #8b0000">widget_sofa</span>', $sofa_options);
		}
	}
	$title = attribute_escape($sofa_options['<span style="color: #8b0000">title</span>']);
<span style="color: #0000ff">?&gt;</span>
	<span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">label</span> <span style="color: #ff0000">for</span>=<span style="color: #0000ff">"wp_sofa_title"</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;?</span>php _e('<span style="color: #8b0000">Title:</span>'); <span style="color: #0000ff">?&gt;</span> <span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">style</span>=<span style="color: #0000ff">"width: 250px;"</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"sofa_title"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"sofa_title"</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"text"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"&lt;?php echo $title; ?&gt;"</span> <span style="color: #0000ff">/&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">label</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>
	<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"hidden"</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"sofa_submit"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"sofa_submit"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"1"</span> <span style="color: #0000ff">/&gt;</span>
<span style="color: #0000ff">&lt;?</span>php
}

register_widget_control('<span style="color: #8b0000">WP-Sofa</span>', '<span style="color: #8b0000">widget_sofa_options</span>', 300, 90);</pre>
<p>上面这段代码就是创建一个 Widget 选项的界面。代码非常简单，也做注释，我这里也不多说了。</p>
<p>然后昨天的创建的 <code>widget_sofa</code> 函数中的 <code><a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $before_widget;</code> 中插入以下几行：</p>
<pre><span style="color: #0000ff">&lt;?</span>
$sofa_options = get_option('<span style="color: #8b0000">widget_sofa</span>');
$title = $sofa_options['<span style="color: #8b0000">title</span>'];
<a style="color: #0000ff" href="http://www.php.net/if">if</a> ( empty($title) ) $title = '<span style="color: #8b0000">最沙发的人</span>';
</pre>
<p>这段代码是获取用户设置的标题，如果没有设置，则显示默认的“最沙发的人”。</p>
<p>好了，这节到此为止，下一节我们讲解<a href="http://fairyfish.net/2007/11/19/write-plugin-by-yourself-widget-api/"> WordPress 的 API</a>。请保持关注。沙发三代下载：<a href="http://wpcn.googlecode.com/files/wp-sofa-3.0.zip">wp-sofa-3.0.zip</a></p>
<p>&gt;&gt;&gt;<a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/" title="自己动手写 WordPress 插件：窗体化插件 2">继续阅读全文</a> ...</p><hr /><p><a href="http://s.click.taobao.com/t_8?e=7HZ5x%2BOzcBqQvUL9HREWEoUWa1c%3D&p=mm_25083601_0_0" rel="nofollow"><img src="http://fairyfish.net/wp-content/banner/notyet.gif"></a></p>
<p>
&copy; <a href="http://fairyfish.net/" title="我爱水煮鱼">我爱水煮鱼</a>
 / <a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/&title=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E7%AA%97%E4%BD%93%E5%8C%96%E6%8F%92%E4%BB%B6+2&tags=Widget, WordPress 插件, WordPress 教程, 沙发, "  title="自己动手写 WordPress 插件：窗体化插件 2">收藏本文</a>
 / <a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/#comments" title="自己动手写 WordPress 插件：窗体化插件 2">10条评论</a>
 / <a href="http://feed.fairyfish.net" title="订阅我爱水煮鱼">RSS 订阅</a>
 / <a href="http://fairyfish.net/go/wpjam" title="WordPress JAM">长期承接 WordPress 项目</a>
 / <a href="http://fairyfish.net/coupon/" title="主机域名优惠码">主机域名优惠码</a>
 / <a href="http://weibo.com/denishua/" title="新浪微博">新浪微博</a>
</p><h3>相关日志</h3><ul class="related_post"><li><a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/" title="自己动手写 WordPress 插件：窗体化插件 1">自己动手写 WordPress 插件：窗体化插件 1</a></li>
<li><a href="http://fairyfish.net/2007/12/22/write-plugin-by-yourself-option/" title="自己动手写 WordPress 插件：后台选项">自己动手写 WordPress 插件：后台选项</a></li>
<li><a href="http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/" title="自己动手写 WordPress 插件：使用 WP-Cron">自己动手写 WordPress 插件：使用 WP-Cron</a></li>
<li><a href="http://fairyfish.net/2007/11/19/write-plugin-by-yourself-api/" title="自己动手写 WordPress 插件：使用 API">自己动手写 WordPress 插件：使用 API</a></li>
<li><a href="http://fairyfish.net/2007/11/09/write-plugin-by-yourself-begin/" title="自己动手写 WordPress 插件：开始">自己动手写 WordPress 插件：开始</a></li>
<li><a href="http://fairyfish.net/2008/12/08/quick-press-widget/" title="WordPress 插件推荐：Quick Press Widget">WordPress 插件推荐：Quick Press Widget</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=1189511966&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F11%2F12%2Fwrite-plugin-by-yourself-widget-2%2F&amp;utmdt=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E7%AA%97%E4%BD%93%E5%8C%96%E6%8F%92%E4%BB%B6+2&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>自己动手写 WordPress 插件：窗体化插件 1</title>
		<link>http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/</link>
		<comments>http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 15:16:16 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordPress 插件]]></category>
		<category><![CDATA[WordPress 教程]]></category>
		<category><![CDATA[沙发]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/11/10/%e8%87%aa%e5%b7%b1%e5%8a%a8%e6%89%8b%e5%86%99%e6%8f%92%e4%bb%b6%ef%bc%9a%e7%aa%97%e4%bd%93%e5%8c%96%e6%8f%92%e4%bb%b6/</guid>
		<description><![CDATA[上一节我们通过一个很简单并且很有意义的插件 WP-Sofa 给大家讲解了如何自己动手开始写插件，今天将和大家讲解如和窗体化这个插件，并推出我们的沙发二代。 首先，什么是窗体化（widgetizing）呢？简单的说，窗体化就是让侧边栏适合 Widget 这个插件（从 2.2 开始，WordPress 已经内置了 Widget），它能让你非常容易就能够重新整理侧边栏的模块，而不需要手工去修改代码。 立刻就会跑出第二个问题，主题不支持 Widget，怎么办？能怎么办，不懂代码的，换一个主题咯，懂的修改代码让它支持咯，如何修改？看文章：窗体化侧边栏 废话说完了，那我们开始我们今天的主题：窗体化你的插件。 首先，我们让插件能够支持 Widget 只是一个额外的功能，原有的手工调用的功能还是要保持。所以我们把原有的代码作如下改动： 把原有的sofa 这个函数的函数名修改为 get_sofa。 把最后的 echo $output; 修改成 return $output;。 然后创建一个新的 sofa 函数。如下： function sofa(){ $output = get_sofa(); echo $output; } 这样保证了原来的 sofa 函数还能自动调用。 下面我们开始 widget 这个插件： 首先了解下基本的 Widget 语法： &#60;?php function widget_myuniquewidget($args) { extract($args); ?&#62; &#60;?php echo $before_widget; ?&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>上一节我们通过一个很简单并且很有意义的插件 WP-Sofa 给大家讲解了<a href="http://fairyfish.net/2007/11/09/write-plugin-by-yourself-begin/">如何自己动手开始写插件</a>，今天将和大家讲解如和窗体化这个插件，并推出我们的沙发二代。</p>
<p>首先，什么是窗体化（widgetizing）呢？简单的说，窗体化就是让侧边栏适合 Widget 这个插件（从 2.2 开始，WordPress 已经内置了 Widget），它能让你非常容易就能够重新整理侧边栏的模块，而不需要手工去修改代码。</p>
<p>立刻就会跑出第二个问题，主题不支持 Widget，怎么办？能怎么办，不懂代码的，换一个主题咯，懂的修改代码让它支持咯，如何修改？看文章：<a href="http://fairyfish.net/2007/06/13/wp-theme-lesson-6e-widgetizing-sidebar/">窗体化侧边栏</a></p>
<p>废话说完了，那我们开始我们今天的主题：窗体化你的插件。<br />
<span id="more-1122"></span><br />
首先，我们让插件能够支持 Widget 只是一个额外的功能，原有的手工调用的功能还是要保持。所以我们把原有的代码作如下改动：<br />
把原有的<code>sofa</code> 这个函数的函数名修改为 <code>get_sofa</code>。<br />
把最后的 <code>echo $output;</code> 修改成 <code>return $output;</code>。<br />
然后创建一个新的 sofa 函数。如下：</p>
<pre><a style="color: #0000ff" href="http://www.php.net/function">function</a> sofa(){
	$output = get_sofa();
	<a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $output;
}</pre>
<p>这样保证了原来的 sofa 函数还能自动调用。</p>
<p>下面我们开始 widget 这个插件：</p>
<p>首先了解下<strong>基本的 Widget 语法</strong>：</p>
<pre><span style="color: #0000ff">&lt;?</span>php
<a href="http://www.php.net/function" style="color: #0000ff">function</a> widget_myuniquewidget($args) {
       <a href="http://www.php.net/extract" style="color: #ffa500">extract</a>($args);
<span style="color: #0000ff">?&gt;</span>
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_widget; <span style="color: #0000ff">?&gt;</span>
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_title . '<span style="color: #8b0000">My Unique Widget</span>' . $after_title; <span style="color: #0000ff">?&gt;</span>
               Hello, World!
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $after_widget; <span style="color: #0000ff">?&gt;</span>
<span style="color: #0000ff">&lt;?</span>php
}
register_sidebar_widget('<span style="color: #8b0000">My Unique Widget</span>', '<span style="color: #8b0000">widget_myuniquewidget</span>');
<span style="color: #0000ff">?&gt;</span></pre>
<p>上面的代码用用 register_sidebar_widget 注册函数自己之后，输出 widget 标题 &#8216;My Unique Widget&#8217; 及內容 &#8216;Hello, World!&#8217;。</p>
<p><strong>只要把标题替换成自己的标题，然后把 &#8216;Hello, World!&#8217; 替换成自己的内容即可。</strong></p>
<p>然后又从 WordPress Widgets 说明文档上知道：不要在插件导入之后执行任何代码，并使用 plugins_loaded 这个hook。从而得知 add_action 的对象是 plugins_loaded。</p>
<p>根据上面的分析，我们的 Sofa 的 widget 函数为：</p>
<pre><span style="color: #0000ff">&lt;?</span>
<a style="color: #0000ff" href="http://www.php.net/function">function</a> widget_sidebar_sofa() {
	<a style="color: #0000ff" href="http://www.php.net/function">function</a> widget_sofa($args) {
	    <a style="color: #ffa500" href="http://www.php.net/extract">extract</a>($args);
		<a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $before_widget;
		<a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $before_title . '<span style="color: #8b0000">最沙发的人</span>' . $after_title;
			$output = get_sofa();
			<a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $output;
		<a style="color: #0000ff" href="http://www.php.net/echo">echo</a> $after_widget;
	}
	register_sidebar_widget('<span style="color: #8b0000">WP-Sofa</span>', '<span style="color: #8b0000">widget_sofa</span>');
}

add_action('<span style="color: #8b0000">plugins_loaded</span>', '<span style="color: #8b0000">widget_sidebar_sofa</span>');</pre>
<p>OK，这节到此为止。哦，你错了，下一节我们将继续这个话题：<a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/">窗体化插件 2</a>，还有什么好讲的呢？到时候关注就行了，嘿嘿。根据 <a href="http://www.underone.com/2007/11/09/sofa/">Underone 的建议</a> 把插件的名字改为最沙发的人，另外在抢沙发战役中屡屡败给某著名沙发党<a href="http://caitou.com/">大猫</a>和<a href="http://hi.baidu.com/huge">胡戈戈</a>同学，所以该插件的作者名字也该成：抢不到沙发的人。如果你因此认为这是两个插件，本人不负任何责任。第二版下载地址：<a href="http://wpcn.googlecode.com/files/wp-sofa-2.0.zip">wp-sofa-2.0.zip</a>。</p>
<p>&gt;&gt;&gt;<a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/" title="自己动手写 WordPress 插件：窗体化插件 1">继续阅读全文</a> ...</p><hr /><p><a href="http://s.click.taobao.com/t_8?e=7HZ5x%2BOzcBqQvUL9HREWEoUWa1c%3D&p=mm_25083601_0_0" rel="nofollow"><img src="http://fairyfish.net/wp-content/banner/notyet.gif"></a></p>
<p>
&copy; <a href="http://fairyfish.net/" title="我爱水煮鱼">我爱水煮鱼</a>
 / <a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/&title=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E7%AA%97%E4%BD%93%E5%8C%96%E6%8F%92%E4%BB%B6+1&tags=Widget, WordPress 插件, WordPress 教程, 沙发, "  title="自己动手写 WordPress 插件：窗体化插件 1">收藏本文</a>
 / <a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/#comments" title="自己动手写 WordPress 插件：窗体化插件 1">7条评论</a>
 / <a href="http://feed.fairyfish.net" title="订阅我爱水煮鱼">RSS 订阅</a>
 / <a href="http://fairyfish.net/go/wpjam" title="WordPress JAM">长期承接 WordPress 项目</a>
 / <a href="http://fairyfish.net/coupon/" title="主机域名优惠码">主机域名优惠码</a>
 / <a href="http://weibo.com/denishua/" title="新浪微博">新浪微博</a>
</p><h3>相关日志</h3><ul class="related_post"><li><a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/" title="自己动手写 WordPress 插件：窗体化插件 2">自己动手写 WordPress 插件：窗体化插件 2</a></li>
<li><a href="http://fairyfish.net/2007/12/22/write-plugin-by-yourself-option/" title="自己动手写 WordPress 插件：后台选项">自己动手写 WordPress 插件：后台选项</a></li>
<li><a href="http://fairyfish.net/2007/11/26/write-plugin-by-yourself-cron/" title="自己动手写 WordPress 插件：使用 WP-Cron">自己动手写 WordPress 插件：使用 WP-Cron</a></li>
<li><a href="http://fairyfish.net/2007/11/19/write-plugin-by-yourself-api/" title="自己动手写 WordPress 插件：使用 API">自己动手写 WordPress 插件：使用 API</a></li>
<li><a href="http://fairyfish.net/2007/11/09/write-plugin-by-yourself-begin/" title="自己动手写 WordPress 插件：开始">自己动手写 WordPress 插件：开始</a></li>
<li><a href="http://fairyfish.net/2008/12/08/quick-press-widget/" title="WordPress 插件推荐：Quick Press Widget">WordPress 插件推荐：Quick Press Widget</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=1941779464&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F11%2F10%2Fwrite-plugin-by-yourself-widget-1%2F&amp;utmdt=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99+WordPress+%E6%8F%92%E4%BB%B6%EF%BC%9A%E7%AA%97%E4%BD%93%E5%8C%96%E6%8F%92%E4%BB%B6+1&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>WordCamp 的最新消息</title>
		<link>http://fairyfish.net/2007/07/26/news-from-wordcamp/</link>
		<comments>http://fairyfish.net/2007/07/26/news-from-wordcamp/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 08:14:41 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Gallery]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordPress MU]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/07/26/news-from-wordcamp/</guid>
		<description><![CDATA[WordPress 爱好者的大会 WordCamp 已经落幕了，我们虽然不能参加，但是还是能够获得一些最新的消息的，下面这篇这些消息节选自 Blogging Pro&#160;的 WordCamp 2007: Day 2。本人增加一些注释。 从去年的 WordCamp 到现在，WordPress 增加了下面这些功能： bbpress 论坛程序，可以和 WordPress 完美整合 WordPress MU 多用户版的 WordPress。 Autosave 指在编辑日志时候的自动保存功能。 Tabbed Editing Ajax Extension to XML-RPC Pseudo-cron 支持预定义任务时序安排框架 Custom headers 自定义化默认主题的头部！ Widgets 核心代码支持 Widgets 新的 WordPress 开发计划 2.3 将在九月份发布。 开发员承诺每年发布3个版本，4个月的开发周期。 WordPress 将会演变进化成一个内容管理系统 (CMS)。 Mike Adams 继续将把 WordPress 核心功能 (用户系统，登录系统，格式化， sanitization（不知道这个词怎么翻译好），脚本建设) 整理到一个叫做 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 爱好者的大会 WordCamp 已经落幕了，我们虽然不能参加，但是还是能够获得一些最新的消息的，下面这篇这些消息节选自 <a title="" href="http://www.bloggingpro.com/">Blogging Pro</a>&nbsp;的 <a href="http://www.bloggingpro.com/archives/2007/07/23/wordcamp-2007-day-2/">WordCamp 2007: Day 2</a>。本人增加一些注释。</p>
<p><span id="more-945"></span></p>
<p>从去年的 WordCamp 到现在，WordPress 增加了下面这些功能：
<ul>
<li>bbpress <br />论坛程序，可以和 WordPress 完美整合
<li>WordPress MU <br />多用户版的 WordPress。
<li>Autosave <br />指在编辑日志时候的自动保存功能。
<li>Tabbed Editing
<li>Ajax
<li>Extension to XML-RPC
<li>Pseudo-cron <br />支持预定义任务时序安排框架
<li>Custom headers <br />自定义化默认主题的头部！
<li>Widgets <br />核心代码支持 Widgets</li>
</ul>
<h2>新的 WordPress 开发计划</h2>
<ul>
<li>2.3 将在九月份发布。
<li>开发员承诺每年发布3个版本，4个月的开发周期。
<li>WordPress 将会演变进化成一个内容管理系统 (CMS)。
<li>Mike Adams 继续将把 WordPress 核心功能 (用户系统，登录系统，格式化， sanitization（不知道这个词怎么翻译好），脚本建设) 整理到一个叫做 BackPress 代码库中。
<li>可能引入 WordPress 缓存代理机制 (WPCP)，一个更适合簇箱的程序自省的带来服务器。(这里翻译可能有误，原文是 Possible inclusion of WordPress Caching Proxy (WPCP) a more application-aware proxy server suitable for a cluster of boxes.)
<li>内建可以使用 S3，Flickr 或者其他存储站点的 API。
<li>更好的本地化语言。
<li>改进 Akismet，特别是当 Akismet 服务不行的时候怎么样处理评论。
<li>改进可视化编辑。
<li>增强支持图像，声音（如 Podcasts）和视频的支持。</li>
</ul>
<h2>个人意见：</h2>
<p>非常期待 2.3，主要是它支持 tag 功能，我一直没有装 UTW 这个插件就是因为 2.3 内置 tag 功能。</p>
<p>WordPress 其实现在很多人已经把它作成了 CMS 系统了，不知道它下一步会怎么演化。但愿不要像别的 CMS 系统一样其他个功能太强了，反而丢掉了原来好的东西。另外担心它功能增加之后的速度问题。</p>
<p>现在我还不是很清楚 Mike Adams 做的是不是文档的工作。如果是对于 WordPress 的使用将会有非常大的帮助。</p>
<p>WPCP 这个缓存代理机制，我不是很了解，现在默认的 Cache 功能好像提速不了多少，所以很多人要去使用 wp-cache 这个插件。</p>
<p>Akismet 确实需要改进了。其他的功能关注比较少，也不多评论了。</p>
<p>&gt;&gt;&gt;<a href="http://fairyfish.net/2007/07/26/news-from-wordcamp/" title="WordCamp 的最新消息">继续阅读全文</a> ...</p><hr /><p><a href="http://s.click.taobao.com/t_8?e=7HZ5x%2BOzcBqQvUL9HREWEoUWa1c%3D&p=mm_25083601_0_0" rel="nofollow"><img src="http://fairyfish.net/wp-content/banner/notyet.gif"></a></p>
<p>
&copy; <a href="http://fairyfish.net/" title="我爱水煮鱼">我爱水煮鱼</a>
 / <a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/07/26/news-from-wordcamp/&title=WordCamp+%E7%9A%84%E6%9C%80%E6%96%B0%E6%B6%88%E6%81%AF&tags=Gallery, Widget, WordCamp, WordPress MU, "  title="WordCamp 的最新消息">收藏本文</a>
 / <a href="http://fairyfish.net/2007/07/26/news-from-wordcamp/#comments" title="WordCamp 的最新消息">3条评论</a>
 / <a href="http://feed.fairyfish.net" title="订阅我爱水煮鱼">RSS 订阅</a>
 / <a href="http://fairyfish.net/go/wpjam" title="WordPress JAM">长期承接 WordPress 项目</a>
 / <a href="http://fairyfish.net/coupon/" title="主机域名优惠码">主机域名优惠码</a>
 / <a href="http://weibo.com/denishua/" title="新浪微博">新浪微博</a>
</p><h3>相关日志</h3><ul class="related_post"><li><a href="http://fairyfish.net/2012/04/12/half-of-the-top-100-blogs-now-use-wordpress/" title="国外前 100 名博客半数使用 WordPress">国外前 100 名博客半数使用 WordPress</a></li>
<li><a href="http://fairyfish.net/article/wordpress-performance/" title="WordPress 性能优化：为什么我的博客比你的快 ">WordPress 性能优化：为什么我的博客比你的快 </a></li>
<li><a href="http://fairyfish.net/m/wordpress-action-hooks/" title="WordPress 常用 Action 接口">WordPress 常用 Action 接口</a></li>
<li><a href="http://fairyfish.net/article/wordpress-seo/" title="WordPress SEO 宝典">WordPress SEO 宝典</a></li>
<li><a href="http://fairyfish.net/article/install-wordpress-on-mac-os-x/" title="在 Mac OS X 系统上安装 WordPress 本地测试">在 Mac OS X 系统上安装 WordPress 本地测试</a></li>
<li><a href="http://fairyfish.net/2010/12/23/wpjam-vshop/" title="基于 WordPress 虚拟商品销售的商城系统">基于 WordPress 虚拟商品销售的商城系统</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=643771931&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F07%2F26%2Fnews-from-wordcamp%2F&amp;utmdt=WordCamp+%E7%9A%84%E6%9C%80%E6%96%B0%E6%B6%88%E6%81%AF&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/07/26/news-from-wordcamp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Widgetize 侧边栏的登录窗口</title>
		<link>http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/</link>
		<comments>http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 05:38:52 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[WordPress 插件]]></category>

		<guid isPermaLink="false">http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/</guid>
		<description><![CDATA[前面介绍了如何在侧边拦设置登录窗口，其中 Brezeck 由于使用 Widget 不好使用这个插件，于是今天去查了下怎么写 Widget 插件（可能需要代理才能访问），花了1个小时写了这个 Widget 插件，由于时间仓促，可能存在些错误，如果你发现，请向我 report 下。 下载地址：点击下载 下载后，解压缩，把 widget_sidebar_login_panel.php 上传到 plugins 目录下，到管理界面激活即可。当然还要到 Presentation 的 Widgets 设置显示位置。 以下谈谈这个插件的制作过程： 基本的 Widget 语法： &#60;?php function widget_myuniquewidget($args) { extract($args); ?&#62; &#60;?php echo $before_widget; ?&#62; &#60;?php echo $before_title . 'My Unique Widget' . $after_title; ?&#62; Hello, World! &#60;?php echo $after_widget; ?&#62; &#60;?php } register_sidebar_widget('My Unique [...]]]></description>
			<content:encoded><![CDATA[<p>前面介绍了如何<a href="http://fairyfish.net/2007/07/24/how-to-place-a-login-form-in-the-sidebar/">在侧边拦设置登录窗口</a>，其中 <a href="http://www.wenyuange.info">Brezeck</a> 由于使用 Widget 不好使用这个插件，于是今天去查了下<a href="http://automattic.com/code/widgets/plugins/">怎么写 Widget 插件</a>（可能需要代理才能访问），花了1个小时写了这个 Widget 插件，由于时间仓促，可能存在些错误，如果你发现，请向我 report 下。</p>
<p>下载地址：<a href="http://www.box.net/shared/ao32xf6edf">点击下载</a></p>
<p>下载后，解压缩，把 widget_sidebar_login_panel.php 上传到 plugins 目录下，到管理界面激活即可。当然还要到 Presentation 的 Widgets 设置显示位置。</p>
<p>以下谈谈这个插件的制作过程：</p>
<p><span id="more-942"></span></p>
<h2>基本的 Widget 语法：</h2>
<pre><span style="color: #0000ff">&lt;?</span>php
<a href="http://www.php.net/function" style="color: #0000ff">function</a> widget_myuniquewidget($args) {
       <a href="http://www.php.net/extract" style="color: #ffa500">extract</a>($args);
<span style="color: #0000ff">?&gt;</span>
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_widget; <span style="color: #0000ff">?&gt;</span>
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_title . '<span style="color: #8b0000">My Unique Widget</span>' . $after_title; <span style="color: #0000ff">?&gt;</span>
               Hello, World!
       <span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $after_widget; <span style="color: #0000ff">?&gt;</span>
<span style="color: #0000ff">&lt;?</span>php
}
register_sidebar_widget('<span style="color: #8b0000">My Unique Widget</span>', '<span style="color: #8b0000">widget_myuniquewidget</span>');
<span style="color: #0000ff">?&gt;</span></pre>
<p>上面的代码用用 register_sidebar_widget 注册函数自己之后，输出 widget 标题 &#8216;My Unique Widget&#8217; 及內容 &#8216;Hello, World!&#8217;。</p>
<p><strong>只要把标题替换成自己的标题，然后把 &#8216;Hello, World!&#8217; 替换成自己的内容即可。</strong></p>
<p>在查看 <a href="http://www.wpdesigner.com/wp-content/files/codes/sidebar_login.txt">sidebar_login.txt</a> 中的代码，它是通过 $user_ID 这个变量判断是否有用户登录来显示不同的 panel，如果用户登录了，则显示一些操作链接，没有用户登录，则显示用户登录界面和注册链接。所以我们把我们判断语句和基本的 Widget 语法穿插起来就可以实现这个 Widget 插件。</p>
<p>然后又从 WordPress Widgets 说明文档上知道：不要在插件导入之后执行任何代码，并使用 <strong>plugins_loaded</strong> 这个hook。从而得知 add_action 的对象是 <strong>plugins_loaded</strong>。</p>
<p>综合以上，得到以下代码：</p>
<pre><span style="color: #0000ff">&lt;?</span>php
<span style="color: #008000">/*
Plugin Name: Sidebar Login Panel Widget
Plugin URI: http://fairyfish.com/
Description: add a login panel in your sidebar
Version: 1.0
Author: Denis Deng
Author URI: http://fairyfish.com/
*/</span>

<a href="http://www.php.net/function" style="color: #0000ff">function</a> widget_sidebar_login_panel_hook() {
	<a href="http://www.php.net/function" style="color: #0000ff">function</a> widget_sidebar_login_panel($args) {
		<a href="http://www.php.net/extract" style="color: #ffa500">extract</a>($args);
	<span style="color: #0000ff">?&gt;</span>
		<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_widget; <span style="color: #0000ff">?&gt;</span>
		<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/global" style="color: #0000ff">global</a> $user_ID, $user_identity, $user_level <span style="color: #0000ff">?&gt;</span>
		<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/if" style="color: #0000ff">if</a> ( $user_ID ) : <span style="color: #0000ff">?&gt;</span>
			<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_title . '<span style="color: #8b0000">Control panel</span>' . $after_title; <span style="color: #0000ff">?&gt;</span>
			<span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>Identified as <span style="color: #0000ff">&lt;</span><span style="color: #800000">strong</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $user_identity <span style="color: #0000ff">?&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">strong</span><span style="color: #0000ff">&gt;</span>.<span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>
			<span style="color: #0000ff">&lt;</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a</span> <span style="color: #ff0000">href</span>=<span style="color: #0000ff">"&lt;?php bloginfo('url') ?&gt;/wp-admin/"</span><span style="color: #0000ff">&gt;</span>Dashboard<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/if" style="color: #0000ff">if</a> ( $user_level &gt;= 1 ) : <span style="color: #0000ff">?&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a</span> <span style="color: #ff0000">href</span>=<span style="color: #0000ff">"&lt;?php bloginfo('url') ?&gt;/wp-admin/post-new.php"</span><span style="color: #0000ff">&gt;</span>Write an article<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/endif" style="color: #0000ff">endif</a> <span style="color: #008000">// $user_level &gt;= 1 ?&gt;</span>
				&lt;li&gt;&lt;a href="<span style="color: #8b0000">&lt;?php bloginfo('url') ?&gt;/wp-admin/profile.php</span>"&gt;Profile and personal options&lt;/a&gt;&lt;/li&gt;
				&lt;li&gt;&lt;a href="<span style="color: #8b0000">&lt;?php bloginfo('url') ?&gt;/wp-login.php?action=logout&amp;redirect_to=&lt;?php echo urlencode($_SERVER['REQUEST_URI']) ?&gt;</span>"&gt;<a href="http://www.php.net/Exit" style="color: #ffa500">Exit</a>&lt;/a&gt;&lt;/li&gt;
			&lt;/ul&gt;
		&lt;?php <a href="http://www.php.net/elseif" style="color: #0000ff">elseif</a> ( get_option('<span style="color: #8b0000">users_can_register</span>') ) : <span style="color: #0000ff">?&gt;</span>
		<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $before_title . '<span style="color: #8b0000">Identification</span>' . $after_title; <span style="color: #0000ff">?&gt;</span>
			<span style="color: #0000ff">&lt;</span><span style="color: #800000">form</span> <span style="color: #ff0000">action</span>=<span style="color: #0000ff">"&lt;?php bloginfo('url') ?&gt;/wp-login.php"</span> <span style="color: #ff0000">method</span>=<span style="color: #0000ff">"post"</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"text"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"log"</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"log"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"&lt;?php echo wp_specialchars(stripslashes($user_login), 1) ?&gt;"</span> <span style="color: #ff0000">size</span>=<span style="color: #0000ff">"16"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #0000ff">&lt;</span><span style="color: #800000">label</span> <span style="color: #ff0000">for</span>=<span style="color: #0000ff">"log"</span><span style="color: #0000ff">&gt;</span>User<span style="color: #0000ff">&lt;/</span><span style="color: #800000">label</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span> <span style="color: #0000ff">/&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"password"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"pwd"</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"pwd"</span> <span style="color: #ff0000">size</span>=<span style="color: #0000ff">"16"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #0000ff">&lt;</span><span style="color: #800000">label</span> <span style="color: #ff0000">for</span>=<span style="color: #0000ff">"pwd"</span><span style="color: #0000ff">&gt;</span>Password<span style="color: #0000ff">&lt;/</span><span style="color: #800000">label</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span> <span style="color: #0000ff">/&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span> <span style="color: #0000ff">/&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"submit"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"submit"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"Send"</span> <span style="color: #ff0000">class</span>=<span style="color: #0000ff">"button"</span> <span style="color: #0000ff">/&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">label</span> <span style="color: #ff0000">for</span>=<span style="color: #0000ff">"rememberme"</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"rememberme"</span> <span style="color: #ff0000">id</span>=<span style="color: #0000ff">"rememberme"</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"checkbox"</span> <span style="color: #ff0000">checked</span>=<span style="color: #0000ff">"checked"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"forever"</span> <span style="color: #0000ff">/&gt;</span> Remember me<span style="color: #0000ff">&lt;/</span><span style="color: #800000">label</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span> <span style="color: #0000ff">/&gt;</span>
				<span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">input</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">"hidden"</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">"redirect_to"</span> <span style="color: #ff0000">value</span>=<span style="color: #0000ff">"&lt;?php echo $_SERVER['REQUEST_URI']; ?&gt;"</span><span style="color: #0000ff">/&gt;</span>
			<span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span>
			<span style="color: #0000ff">&lt;</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a</span> <span style="color: #ff0000">href</span>=<span style="color: #0000ff">"&lt;?php bloginfo('url') ?&gt;/wp-register.php"</span><span style="color: #0000ff">&gt;</span>Register<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span>
				<span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a</span> <span style="color: #ff0000">href</span>=<span style="color: #0000ff">"&lt;?php bloginfo('url') ?&gt;/wp-login.php?action=lostpassword"</span><span style="color: #0000ff">&gt;</span>Recover password<span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span>
			<span style="color: #0000ff">&lt;/</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span>

	<span style="color: #0000ff">&lt;?</span>php <a href="http://www.php.net/endif" style="color: #0000ff">endif</a> <span style="color: #008000">// get_option('users_can_register') ?&gt;</span>
		&lt;?php <a href="http://www.php.net/echo" style="color: #0000ff">echo</a> $after_widget; <span style="color: #0000ff">?&gt;</span>
	<span style="color: #0000ff">&lt;?</span>php
	}
	register_sidebar_widget('<span style="color: #8b0000">Sidebar Login Panel Widget</span>', '<span style="color: #8b0000">widget_sidebar_login_panel</span>');
}
add_action('<span style="color: #8b0000">plugins_loaded</span>', '<span style="color: #8b0000">widget_sidebar_login_panel_hook</span>');
<span style="color: #0000ff">?&gt;</span></pre>
<p>你愿意的话可以把其中的英文改成中文就可以成为中文版。hoho <img src='http://fairyfish.b0.upaiyun.com/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>参考文档：</h2>
<p>这个插件的制作基本参考了 <a href="http://filitov.twcat.org/blog/">喵爸爸的窩</a> 的 <a href="http://filitov.twcat.org/blog/?p=280">WordPress widget 習作：FIFA CountDown</a>。</p>
<p><a href="http://automattic.com/code/widgets/plugins/">How do I develop new widgets?</a></p>
<p><a href="http://www.crystown.cn/">Crystown</a> 的两篇关于 Widget 研究也写的很不错，很大的参考作用。</p>
<ul>
<li><a href="http://www.crystown.cn/index.php/p/36/">WordPress Widget 研究(一)</a></li>
<li><a href="http://www.crystown.cn/index.php/p/48/">WordPress Widget 研究(二)</a></li>
</ul>
<p>另外还有插件 <a href="http://www.erik-rasmussen.com/blog/index.php?p=140">Widgetize Anything</a> 可以帮你制作任何的 Widget，大家可以去试下。</p>
<p>Update：2007年7月26日，发现 Small Potato 已经写出了这个 Widget：<a href="http://www.wpdesigner.com/2007/07/14/my-account-widget/">My Account Widget</a><br />
哎，白忙了一场，不过也明白了怎么去写 Widget 不过。</p>
<p>&gt;&gt;&gt;<a href="http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/" title="Widgetize 侧边栏的登录窗口">继续阅读全文</a> ...</p><hr /><p><a href="http://s.click.taobao.com/t_8?e=7HZ5x%2BOzcBqQvUL9HREWEoUWa1c%3D&p=mm_25083601_0_0" rel="nofollow"><img src="http://fairyfish.net/wp-content/banner/notyet.gif"></a></p>
<p>
&copy; <a href="http://fairyfish.net/" title="我爱水煮鱼">我爱水煮鱼</a>
 / <a href="http://fairyfish.net/bookmark/?url=http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/&title=Widgetize+%E4%BE%A7%E8%BE%B9%E6%A0%8F%E7%9A%84%E7%99%BB%E5%BD%95%E7%AA%97%E5%8F%A3&tags=Widget, WordPress 插件, "  title="Widgetize 侧边栏的登录窗口">收藏本文</a>
 / <a href="http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/#comments" title="Widgetize 侧边栏的登录窗口">10条评论</a>
 / <a href="http://feed.fairyfish.net" title="订阅我爱水煮鱼">RSS 订阅</a>
 / <a href="http://fairyfish.net/go/wpjam" title="WordPress JAM">长期承接 WordPress 项目</a>
 / <a href="http://fairyfish.net/coupon/" title="主机域名优惠码">主机域名优惠码</a>
 / <a href="http://weibo.com/denishua/" title="新浪微博">新浪微博</a>
</p><h3>相关日志</h3><ul class="related_post"><li><a href="http://fairyfish.net/2008/12/08/quick-press-widget/" title="WordPress 插件推荐：Quick Press Widget">WordPress 插件推荐：Quick Press Widget</a></li>
<li><a href="http://fairyfish.net/2007/11/12/write-plugin-by-yourself-widget-2/" title="自己动手写 WordPress 插件：窗体化插件 2">自己动手写 WordPress 插件：窗体化插件 2</a></li>
<li><a href="http://fairyfish.net/2007/11/10/write-plugin-by-yourself-widget-1/" title="自己动手写 WordPress 插件：窗体化插件 1">自己动手写 WordPress 插件：窗体化插件 1</a></li>
<li><a href="http://fairyfish.net/m/appdp-list/" title="WordPress 插件：iPhone/iPad 限时免费精选">WordPress 插件：iPhone/iPad 限时免费精选</a></li>
<li><a href="http://fairyfish.net/2012/04/12/half-of-the-top-100-blogs-now-use-wordpress/" title="国外前 100 名博客半数使用 WordPress">国外前 100 名博客半数使用 WordPress</a></li>
<li><a href="http://fairyfish.net/article/duoshuo/" title="多说：最好的社会化评论服务">多说：最好的社会化评论服务</a></li>
</ul><img src="http://fairyfish.net/wp-content/plugins/all-in-one/ga.php?utmac=MO-328125-5&amp;utmn=1990838807&amp;utmr=-&amp;utmp=%2Frss%2F2007%2F07%2F25%2Fwidget-sidebar-login-panel%2F&amp;utmdt=Widgetize+%E4%BE%A7%E8%BE%B9%E6%A0%8F%E7%9A%84%E7%99%BB%E5%BD%95%E7%AA%97%E5%8F%A3&amp;guid=ON" />]]></content:encoded>
			<wfw:commentRss>http://fairyfish.net/2007/07/25/widget-sidebar-login-panel/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

