<?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>Hpyer 的未知空间 &#187; plugin</title>
	<atom:link href="http://hpyer.cn/tag/plugin/feed" rel="self" type="application/rss+xml" />
	<link>http://hpyer.cn</link>
	<description>现实的世界里寻找点滴的未知空间</description>
	<lastBuildDate>Tue, 20 Apr 2010 06:53:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>解析 WordPress 插件机制</title>
		<link>http://hpyer.cn/dissect-wordpress-plugin.html</link>
		<comments>http://hpyer.cn/dissect-wordpress-plugin.html#comments</comments>
		<pubDate>Fri, 24 Oct 2008 13:00:00 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 应用]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[插件机制]]></category>

		<guid isPermaLink="false">http://hpyer.cn/?p=388</guid>
		<description><![CDATA[　　一直对软件的组件、插件架构非常感兴趣，我认为现在开发任何应用程序，一定要有一个架构良好的插件机制，这样可以吸引其他人来开发插件，极大的扩充系统的功能。Eclipse就是一个非常棒的例子，几乎你想什么功能，都可以从社区中找到相应的第三方插件。Firefox也同样如此，它的插件机制非常灵活（尤其是相对IE而言），因此Firefox社区中可以找到各种各样的插件...]]></description>
			<content:encoded><![CDATA[<p>　　一直对软件的组件、插件架构非常感兴趣，我认为现在开发任何应用程序，一定要有一个架构良好的插件机制，这样可以吸引其他人来开发插件，极大的扩充系统的功能。Eclipse就是一个非常棒的例子，几乎你想什么功能，都可以从社区中找到相应的第三方插件。Firefox也同样如此，它的插件机制非常灵活（尤其是相对IE而言），因此Firefox社区中可以找到各种各样的插件。</p>
<h4>1）WordPress读取所有可用的插件</h4>
<p>　　在文件“/wp-admin/includes/plugin.php”中，函数 get_plugins() 用来从文件系统得到所有的插件。原理很简单，就是读取“wp-content/plugins”目录下的所有PHP文件。这个函数允许一级的子文件夹，也就是说在’wp-content/plugins’下面的PHP文件，以及所以在此目录下的一级子文件夹内部的PHP文件被列作插件的候选，用下面的函数去进一步提取插件信息。这样的好处是方便用户利用文件夹来对插件进行管理和组织。<br />
　　而函数 get_plugin_data() 则用来得到插件的描述（Plugin Descriptor），主要包括插件的版本、名称、作者，等信息，而这些其实是以注释的方式存在的。用WordPress中自带的Hello插件来举例：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"><br /></span><span style="color: #ffa500;">/*<br />Plugin Name: Hello Dolly<br />Plugin URI: </span><span style="color: Blue;">http://wordpress.org/</span><span style="color: #ffa500;">#<br />Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from &lt;cite&gt;Hello, Dolly&lt;/cite&gt; in the upper right of your admin screen on every page.<br />Author: Matt Mullenweg<br />Version: 1.5<br />Author URI: </span><span style="color: Blue;">http://ma.tt/</span><span style="color: #ffa500;"><br />*/</span><span style="color: Gray;"><br /></span><span style="color: Blue;">?&gt;</span></div></div>
<p>这样，在get_plugin_data函数中，就可以来得到插件的详细信息。</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> <br /></span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">get_plugin_data</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$plugin_file</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;"> = </span><span style="color: Blue;">implode</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">''</span><span style="color: Gray;">, </span><span style="color: Blue;">file</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$plugin_file</span><span style="color: Gray;"> </span><span style="color: Olive;">))</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">|Plugin Name:(.*)$|mi</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_name</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">|Plugin URI:(.*)$|mi</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_uri</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">|Description:(.*)$|mi</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$description</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">|Author:(.*)$|mi</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$author_name</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">|Author URI:(.*)$|mi</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$author_uri</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">preg_match</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">|Version:(.*)|i</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #00008b;">$plugin_data</span><span style="color: Gray;">, </span><span style="color: #00008b;">$version</span><span style="color: Gray;"> </span><span style="color: Olive;">))</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$version</span><span style="color: Gray;"> = </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$version</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">else</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$version</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">''</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$description</span><span style="color: Gray;"> = </span><span style="color: Blue;">wptexturize</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$description</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">))</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$name</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$plugin_name</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$name</span><span style="color: Gray;"> = </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$name</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$plugin</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$name</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #8b0000;">''</span><span style="color: Gray;"> != </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: #00008b;">$plugin_uri</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">])</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: #8b0000;">''</span><span style="color: Gray;"> != </span><span style="color: #00008b;">$name</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$plugin</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;a href=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$plugin_uri</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot; title=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: Blue;">__</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">Visit plugin homepage</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: #00008b;">$plugin</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/a&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #8b0000;">''</span><span style="color: Gray;"> == </span><span style="color: #00008b;">$author_uri</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$author</span><span style="color: Gray;"> = </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$author_name</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$author</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;a href=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$author_uri</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot; title=&quot;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: Blue;">__</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">'</span><span style="color: Red;">Visit author homepage</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;">.</span><span style="color: #8b0000;">'</span><span style="color: Red;">&quot;&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: Blue;">trim</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #00008b;">$author_name</span><span style="color: Olive;">[</span><span style="color: Maroon;">1</span><span style="color: Olive;">]</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;">&lt;/a&gt;</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">return</span><span style="color: Gray;"> </span><span style="color: Green;">array</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">Name</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$name</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Title</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$plugin</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Description</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$description</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Author</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$author</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">Version</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #00008b;">$version</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Blue;">?&gt;</span></div></div>
<h4>2）启用 &#038; 禁用插件</h4>
<p>　　启用（禁用）插件的操作都在Plugins.php中，比如我要Deactive “Hello”这个插件，最后的URL其实是这个样子：</p>
<div class="hl-surround"><div class="hl-main">http://localhost/blog/wp-admin/plugins.php?action=deactivate&amp;plugin=hello.php</div></div>
<p>　　其中，“Action”表示动作，值为“active”或者“deactivate”，而“Plugin”表示动作的对象插件，此处为“hello.php”。得到动作指令后，首先从数据库中取出当前已经激活的插件。</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: #00008b;">$current</span><span style="color: Gray;"> = </span><span style="color: Blue;">get_settings</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">active_plugins</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　然后根据动作，重新生成已激活插件数组，存入数据库，并重新加载此页。加载的时候就需要考虑这些已经激活的插件是怎么工作的了。<br />
BTW：附上数据库的Options表中0插件和只有1个插件的值：<br />
没有插件：
<div class="hl-surround"><div class="hl-main">a:1:{i:0;s:0:&quot;&quot;;}</div></div>
<p>只有Hello插件：
<div class="hl-surround"><div class="hl-main">a:2:{i:0;s:0:&quot;&quot;;i:1;s:9:&quot;hello.php&quot;;}</div></div>
<h4>3）如何加载启用的插件到系统中</h4>
<p>　　WordPress中的每页都会包含“wp-config.php”文件，而“wp-config.php”中也会自动加载“wp-settings.php”文件。在“wp-settings.php”文件中，可以找到以下与插件相关的代码片断：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> <br /></span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">get_option</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">active_plugins</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$current_plugins</span><span style="color: Gray;"> = </span><span style="color: Blue;">get_option</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">active_plugins</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Blue;">is_array</span><span style="color: Olive;">(</span><span style="color: #00008b;">$current_plugins</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">foreach</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #00008b;">$current_plugins</span><span style="color: Gray;"> </span><span style="color: Green;">as</span><span style="color: Gray;"> </span><span style="color: #00008b;">$plugin</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: #8b0000;">''</span><span style="color: Gray;"> != </span><span style="color: #00008b;">$plugin</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Maroon;">0</span><span style="color: Gray;"> == </span><span style="color: Blue;">validate_file</span><span style="color: Olive;">(</span><span style="color: #00008b;">$plugin</span><span style="color: Olive;">)</span><span style="color: Gray;"> &amp;&amp; </span><span style="color: Blue;">file_exists</span><span style="color: Olive;">(</span><span style="color: Blue;">WP_PLUGIN_DIR</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;">/</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$plugin</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">include_once</span><span style="color: Olive;">(</span><span style="color: Blue;">WP_PLUGIN_DIR</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">'</span><span style="color: Red;">/</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$plugin</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　可见，这段代码会取出系统中所有启用的插件，并包含进来。所以在每页加载的时候，都会首先包含这些插件代码。那么，这些插件自己在加载的时候都做了什么呢？</p>
<h4>4）插件的加载</h4>
<p>　　插件的加载其实最重要的一个部分就是插件的事件注册机制，WordPress插件中的事件注册其实和Eclipse中的扩展点（Extension-Point）机制非常相像，而这种类似“插销”、“插销座”的软件插拔方式也成为了最近软件组件架构方面应用最多的实践。<br />
　　事件注册过程中比较重要的几个函数分别是：do_action、add_action、add_filter。WordPress中默认定义了很多扩展点（也可以叫做“钩子”），或者说注册了很多系统事件（WP中的正规叫法应该是“Action Tag”），比如“admin_head”表示Admin页面的Head输出事件，“publish_post”表示发布一篇帖子的事件等等。而插件要做的就是扩展这些扩展点，或者说挂接这些钩子，从而实现系统的扩展功能。add_action就是通常插件扩展某个扩展点用到的函数，而do_action 是扩展点本身开始执行的函数。<br />
　　刚才说过WordPress中的每一页执行前都会Include所有Active的插件代码，而这些代码通常都会用“add_action”来将自己的函数注册到系统的扩展点中。这样，在扩展点执行的时候，就会找到系统中所有已经挂接到这个扩展点上的插件的函数来执行之，从而扩充系统的功能。<br />
　　WordPress中的很多功能也都是通过这种插件结构来实现的，默认注册了很多系统事件，都在’default-filter.php’中。比如：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: Blue;">add_action</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">publish_post</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">generic_ping</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>这个是用来在发布每篇帖子的时候发送XML-RPC Ping的。再比如：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: Blue;">add_filter</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">the_content</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">convert_smilies</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>用来将正文（content）中的笑脸符号转换为图像。<br />
　　还是举“Hello”插件来说。Hello插件会随机的在Admin Page的右上角显示一段话，它的工作原理是这样的：<br />
　　在每一个Admin page的前面都有</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: Green;">require_once</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">admin-header.php</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　而在“admin-head.php”中将会执行扩展点“admin-head”的所有扩展：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: Blue;">do_action</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">admin_head</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">''</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　这样，就会执行所有挂接到admin_head的函数，Admin Page 的 Footer 部分也是类似。</p>
<h4>5）如果插件中涉及UI</h4>
<p>　　其实是一样的。以WordPress FeedBurner Plugin中添加菜单为例。<br />
　　如果想添加一个菜单，就需要注册“admin_menu”这个Action Tag（系统事件）即可：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"> </span><span style="color: Blue;">add_action</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">admin_menu</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">ol_add_feedburner_options_page</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　插件中的这个函数为：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"><br /></span><span style="color: Green;">function</span><span style="color: Gray;"> </span><span style="color: Blue;">ol_add_feedburner_options_page</span><span style="color: Olive;">()</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">function_exists</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">add_options_page</span><span style="color: #8b0000;">'</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">add_options_page</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">FeedBurner</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">FeedBurner</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Maroon;">8</span><span style="color: Gray;">, </span><span style="color: Blue;">basename</span><span style="color: Olive;">(</span><span style="color: Green;">__FILE__</span><span style="color: Olive;">)</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">ol_feedburner_options_subpanel</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　“add_options_page”这个函数就会在系统的“Options”菜单中添加“FeedBurner”这样一个子菜单。</p>
<h4>6）其它</h4>
<p>　　还有一些简单的插件就是只提供一些API函数。比如Most_Commented Plugin，它提供一个API “mdv_most_commented”：通过数据库查询得到评论最多的文章，并加以显示。因为这个插件已经被Include过，所以可以用这个API来进行显示。 </p>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/dissect-wordpress-plugin.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>wordpress 插件2008北京奥运会奖牌榜</title>
		<link>http://hpyer.cn/olympic-games-medal-list-of-beijing-2008.html</link>
		<comments>http://hpyer.cn/olympic-games-medal-list-of-beijing-2008.html#comments</comments>
		<pubDate>Sat, 09 Aug 2008 10:38:26 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 扩展]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[奖牌榜]]></category>
		<category><![CDATA[奥运会]]></category>
		<category><![CDATA[插件]]></category>

		<guid isPermaLink="false">http://www.hpyer.cn/?p=78</guid>
		<description><![CDATA[　　在您的 wordpress 上实时显示北京奥运会奖牌榜前五名的国家/地区。这是我第一次自己动手写 wordpress 插件，所以在调试上折腾了一点时间。数据是来自新浪体育，所以应该是蛮可靠且比较及时的。同时，本插件也支持 widget，方便您的使用。希望大家能喜欢噢～]]></description>
			<content:encoded><![CDATA[<p><strong>说明</strong><br />
　　在您的 wordpress 上实时显示北京奥运会奖牌榜前五名的国家/地区。这是我第一次自己动手写 wordpress 插件，所以在调试上折腾了一点时间。数据是来自新浪体育，所以应该是蛮可靠且比较及时的。同时，本插件也支持 widget，方便您的使用。希望大家能喜欢噢～</p>
<p><strong>效果</strong><br />
<img class="size-full wp-image-79 " src="http://www.hpyer.cn/wp-content/uploads/2008/08/medal-list.png" alt="奥运奖牌榜" width="168" height="176" /></p>
<p><strong>下载</strong><br />
<a href=http://hpyer.cn/files/medal-list.zip>2008奥运会奖牌榜</a> &nbsp; [v1.0 - 20.33 KB - 262 Hits]<br /></p>
<p><strong>使用</strong></p>
<ul>
<li>下载并解压缩 medal-list.zip 文件</li>
<li>将其中的 medal-list 文件夹上传/复制到 wp-content/plugins 目录下</li>
<li>到后台的“插件”管理页中启用本插件（将同时启用 widget）</li>
<li>如果要使用 widget，直接转到 widgets 管理页添加即可</li>
<li>如果不使用 widget，则直接修改主题的模板文件。在合适的位置加上如下代码：
<pre><code>&lt;?php if (function_exists("show_medal_list")) show_medal_list(); ?&gt;</code></pre>
</li>
</ul>
<p><strong>非 wordpress 用户的使用方法</strong></p>
<ul>
<li>下载本插件</li>
<li>拷出其中的 medal-list_iframe.html 和 jquery.js 两个文件，并上传到服务器上</li>
<li>在模板/页面的合适位置，插入下面的代码：
<pre><code>&lt;iframe src="<strong>/wp-content/plugins/medal-list/</strong>medal-list_iframe.html" width="100%"
border="0" frameborder="0"&gt;&lt;/iframe&gt;</code></pre>
<p>其中加粗的部分注意改成上述两个文件存放的路径</li>
<li>用文本编辑器（如记事本）打开 medal-list_iframe.html 文件，将其中下列代码也改成和上面相同的路径，保存即可
<pre><code>/wp-content/plugins/medal-list/</code></pre>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/olympic-games-medal-list-of-beijing-2008.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>插件 Wordpress Thread Comment</title>
		<link>http://hpyer.cn/wordpress-thread-comment.html</link>
		<comments>http://hpyer.cn/wordpress-thread-comment.html#comments</comments>
		<pubDate>Wed, 18 Jun 2008 11:18:58 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 扩展]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[reply]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[回复]]></category>
		<category><![CDATA[评论]]></category>

		<guid isPermaLink="false">http://www.hpyer.cn/?p=60</guid>
		<description><![CDATA[　　似乎很久没推荐过插件了，呵呵，今天来推荐个 Wordpress Thread Comment ，这也是我现在所用的评论插件。原来所用的 Ajax Comments-Reply 对于主题的支持似乎不是十分的到位，也就是样子略显难看了点，呵呵~~不过这点上我要为 <a href="http://zhiqiang.org/blog/" target="_blank">zhiqiang</a> 澄清一下，不能怪作者，而是我懒得去修改样式。这个插件除了兼容 W3C 支持，无需对主题进行修改、嵌套或成串显示相关讨论、AJAX 的无刷新评论等常见特点外，其强大的管理功能，例如：是否启用 AJAX功能、是否电邮通知原评论人有新的评论回复、自定义的HTML、PHP 和 CSS 等等，也是其他同类插件所无法比拟的。所以，“背叛”Ajax Comments-Reply，而“转投”Wordpress Thread Comment 也是不得已而为之呀...]]></description>
			<content:encoded><![CDATA[<p>　　似乎很久没推荐过插件了，呵呵，今天来推荐个 Wordpress Thread Comment ，这也是我现在所用的评论插件。原来所用的 Ajax Comments-Reply 对于主题的支持似乎不是十分的到位，也就是样子略显难看了点，呵呵~~不过这点上我要为 <a href="http://zhiqiang.org/blog/" target="_blank">zhiqiang</a> 澄清一下，不能怪作者，而是我懒得去修改样式。这个插件除了兼容 W3C 支持，无需对主题进行修改、嵌套或成串显示相关讨论、AJAX 的无刷新评论等常见特点外，其强大的管理功能，例如：是否启用 AJAX功能、是否电邮通知原评论人有新的评论回复、自定义的HTML、PHP 和 CSS 等等，也是其他同类插件所无法比拟的。所以，“背叛”Ajax Comments-Reply，而“转投”Wordpress Thread Comment 也是不得已而为之呀~~</p>
<p><em><strong>注：如果需要使用AJAX，在主题中的评论的对象必须依从Wordpress主题标准，有“comment-xxx”这个ID，否则将无法使用AJAX功能。目前仍有少数主题不支持。</strong></em></p>
<p>下载<br />
本站：<a class="downloadlink" href="http://hpyer.cn/files/wp-plugin-wordpress-thread-comment.zip" title="版本 1.4.9.1 已下载 151 次" >Wordpress Thread Comment 多国语言版 (151) - 263.02 KB</a><br />
原站：<a href="http://blog.2i2j.com/plugins/wordpress-thread-comment" target="_blank">http://blog.2i2j.com/plugins/wordpress-thread-comment</a></p>
<p>安装</p>
<ul>
<li>下载并解压。</li>
<li>将此 wordpress-thread-comment 文件夹上传到Wordpress的插件目录：“Wordpress根目录/wp-content/plugins/”。</li>
<li>在后台的“插件”页激活 / 启用本插件。</li>
<li>检查已有评论下是否出现了“回复此评论”（也可能是英文的“Reply”）的链接。</li>
<li>其它设置，如 AJAX 和 HTML / CSS 等请到后台的“设置”页。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/wordpress-thread-comment.html/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>插件 WordPress Plugin Ajax Comments-Reply</title>
		<link>http://hpyer.cn/wordpress-plugin-ajax-comments-reply.html</link>
		<comments>http://hpyer.cn/wordpress-plugin-ajax-comments-reply.html#comments</comments>
		<pubDate>Wed, 26 Mar 2008 11:46:05 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 扩展]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[reply]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[回复]]></category>
		<category><![CDATA[评论]]></category>

		<guid isPermaLink="false">http://www.hpyer.cn/wordpress-plugin-ajax-comments-reply.html</guid>
		<description><![CDATA[
插件作者

zhiqiang (http://zhiqiang.org/blog/)

最新版本

v2.5.5 build 20080315

插件说明
一个还不错的评论管理插件(Made in China 噢~~), 使用上还可以. 可以直接回复别人留言，使得讨论更有针对性。
立即下载



如何安装

禁用已安装的旧版本 (如果你安装过以前的版本的话)
解压缩您下载到压缩包 (可以在第一步之前)
上传/复制 ajaxcomment 文件夹到 wp-content/plugins 目录下
到插件管理页启用插件

其他问题请直接访问作者的插件主页
]]></description>
			<content:encoded><![CDATA[<p><!--TOC--></p>
<h3>插件作者</h3>
<ul>
<li>zhiqiang (<a href="http://zhiqiang.org/blog/" target="_blank">http://zhiqiang.org/blog/</a>)</li>
</ul>
<h3>最新版本</h3>
<ul>
<li>v2.5.5 build 20080315</li>
</ul>
<h3>插件说明</h3>
<p>一个还不错的评论管理插件(Made in China 噢~~), 使用上还可以. 可以直接回复别人留言，使得讨论更有针对性。</p>
<h3>立即下载</h3>
<ul>
<li><a class="downloadlink" href="http://hpyer.cn/files/wp-plugin-AjaxComment-all-in-one.zip" title="版本 2.5.5 已下载 124 次" >Ajax Comments (124) - 54.09 KB</a></li>
</ul>
<h3>如何安装</h3>
<ol>
<li><strong>禁用已安装的旧版本</strong> (如果你安装过以前的版本的话)</li>
<li>解压缩您下载到压缩包 (可以在第一步之前)</li>
<li>上传/复制 ajaxcomment 文件夹到 wp-content/plugins 目录下</li>
<li>到插件管理页启用插件</li>
</ol>
<p>其他问题请直接访问作者的<a href="http://zhiqiang.org/blog/plugin/ajaxcomment" target="_blank">插件主页</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/wordpress-plugin-ajax-comments-reply.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Download Monitor 中中文标题显示为？？的解决办法</title>
		<link>http://hpyer.cn/solution-for-chinese-title-in-download-monitor.html</link>
		<comments>http://hpyer.cn/solution-for-chinese-title-in-download-monitor.html#comments</comments>
		<pubDate>Mon, 17 Mar 2008 03:59:20 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 应用]]></category>
		<category><![CDATA[WordPress 扩展]]></category>
		<category><![CDATA[Download Monitor]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[中文乱码]]></category>
		<category><![CDATA[解决办法]]></category>

		<guid isPermaLink="false">http://www.hpyer.cn/%e5%85%b3%e4%ba%8e-download-monitor-%e4%b8%ad%e4%b8%ad%e6%96%87%e6%a0%87%e9%a2%98%e6%98%be%e7%a4%ba%e4%b8%ba-%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95.html</guid>
		<description><![CDATA[
说明
首先需要说明的是，这个插件是支持中文的。之所以输入的中文变成了 ????，是因为数据库的关系。这个问题上周六就发现并反馈给作者了，但他迟迟没有修复，所以这里提供下载的  也就没有更新。毕竟，还是要尊重人家的著作权的。
问题原因
因为程序在创建数据库的时候是没有指定字符编码的，而系统的数据库可能默认不是 UTF8（默认可能是 latin1_swedish_ci），所以就照成了这个问题。
解决办法

方法一：
打开 phpMyAdmin，把表 wp_dlm_downloads 的字符编码改为 utf8-general-ci（这个表中所有字段的编码也要改一下）。
如果你不知道怎么改编码，或者服务器不允许你手动修改的话，那就用下面的方法吧，可能稍微复杂点。
方法二：
1、先在 phpMyAdmin 中，把表 wp_dlm_downloads 给删了。
2、然后禁用插件。
3、用你喜欢的编辑器打开 wp-download_monitor.php 文件，找到 CREATE TABLE 这个语句（查找 CREATE TABLE 就可以找到，大概在第 80 行左右），然后改成下面这样子（加粗的地方就是需要添加的）：
$sql = &#8220;CREATE TABLE IF NOT EXISTS &#8220;.$wp_dlm_db.&#8221; (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR (200) NOT NULL ,
`filename` LONGTEXT NOT NULL ,
`dlversion` VARCHAR (200) NOT NULL ,
`postDate` DATETIME NOT NULL ,
`hits` [...]]]></description>
			<content:encoded><![CDATA[<p><!--TOC--></p>
<h3>说明</h3>
<p>首先需要说明的是，这个插件是支持中文的。之所以输入的中文变成了 ????，是因为数据库的关系。这个问题上周六就发现并反馈给作者了，但他迟迟没有修复，所以这里提供下载的 <a class="downloadlink" href="http://hpyer.cn/files/wp-plugin-DownloadMonitor-all-in-one.zip" title="版本 2.2.3 已下载 807 次" >Download Monitor 2 简体中文完整版 (807) - 141.02 KB</a> 也就没有更新。毕竟，还是要尊重人家的著作权的。</p>
<h3>问题原因</h3>
<p>因为程序在创建数据库的时候是没有指定字符编码的，而系统的数据库可能默认不是 UTF8（默认可能是 latin1_swedish_ci），所以就照成了这个问题。</p>
<h3>解决办法</h3>
<ul>
<li>方法一：<br />
打开 phpMyAdmin，把表 wp_dlm_downloads 的字符编码改为 utf8-general-ci（这个表中所有字段的编码也要改一下）。<br />
如果你不知道怎么改编码，或者服务器不允许你手动修改的话，那就用下面的方法吧，可能稍微复杂点。</li>
<li>方法二：<br />
1、先在 phpMyAdmin 中，把表 wp_dlm_downloads 给删了。<br />
2、然后禁用插件。<br />
3、用你喜欢的编辑器打开 wp-download_monitor.php 文件，找到 CREATE TABLE 这个语句（查找 CREATE TABLE 就可以找到，大概在第 80 行左右），然后改成下面这样子（加粗的地方就是需要添加的）：<br />
$sql = &#8220;CREATE TABLE IF NOT EXISTS &#8220;.$wp_dlm_db.&#8221; (<br />
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,<br />
`title` VARCHAR (200) NOT NULL ,<br />
`filename` LONGTEXT NOT NULL ,<br />
`dlversion` VARCHAR (200) NOT NULL ,<br />
`postDate` DATETIME NOT NULL ,<br />
`hits` INT UNSIGNED NOT NULL ,<br />
`user` VARCHAR (200) NOT NULL ,<br />
PRIMARY KEY ( `id` )<br />
)<strong> ENGINE=MyISAM DEFAULT CHARSET=utf8</strong>&#8220;;<br />
然后，把这个文件上传到服务器上，覆盖同名文件。<br />
4、启用插件，会自动创建表 wp_dlm_downloads。<br />
这样应该就没问题了。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/solution-for-chinese-title-in-download-monitor.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>插件 WordPress Plugin Download Monitor</title>
		<link>http://hpyer.cn/wordpress-plugin-download-monitor.html</link>
		<comments>http://hpyer.cn/wordpress-plugin-download-monitor.html#comments</comments>
		<pubDate>Thu, 13 Mar 2008 15:24:59 +0000</pubDate>
		<dc:creator>Hpyer</dc:creator>
				<category><![CDATA[WordPress 扩展]]></category>
		<category><![CDATA[Download Monitor]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[下载管理]]></category>

		<guid isPermaLink="false">http://www.hpyer.cn/wordpress/wordpress-plugin-download-monitor.html</guid>
		<description><![CDATA[插件说明
- 一个非常不错的下载管理插件, 使用也很方便, 自己把它给汉化了. 
- 如果使用过程中发现中文显示不正常, 请参阅《Download Monitor 中中文标题显示为 ???? 的解决办法》
- 中文帮助文档，请查看《Wordpress Download Monitor 中文帮助文档》
插件作者
- 原作: Mike Jolley (http://blue-anvil.com/)
- 汉化: Hpyer (http://hpyer.cn/)

最新版本

- 3.3.3（测试版）
- 增加多分类支持
- 合并且改良了文件添加页面
- 从服务器目录中批量添加文件
- 更改新的文件存放目录，将存放于 wp-content/文件上传目录/downloads/ 中，并再以年、月进行区分。例如：wp-content/uploads/downloads/2010/02/
- 修正其它 bugs
查看更多插件的更新日志（英文）

立即下载





早期版本

汉化日志

2010-03-04，由于MJ迟迟没有发布3.3.3的正式版，很多朋友又很希望能体验新版本的功能，所以今天还是先放出3.3.3.5的汉化版，以供大家使用。
2010-02-24，很久没更新了，先跟大家道个歉。由于目前 3.3.3 版的 DM 还处在测试阶段，所以暂时不考虑放出简体中文包，待正式版发布后，小站会尽快更新发布。谢谢大家的支持！
2009-06-17，针对 3.1.3 此次语言包只修正了一处翻译不当。感谢http://hexic.cn的站长
2009-06-13，针对 3.1.1 更新了语言包。从该版本开始，语言包需要被放在download-monitor/languages目录下
2009-05-13，针对 3.0.7 更新了语言包
2009-04-15，针对 3.0.5 更新了语言包
2009-03-29，针对 3.0.4 更新了语言包
2009-03-24，针对 3.0.3 更新了语言包，修正了部分翻译
2009-03-19，针对 3.0.1 更新了语言包
2009-01-16，针对 2.2.3 更新了语言包，只修改了一处
2009-01-07，针对 2.2.2 更新了语言包，与 2.2.1 的语言包没有大的出入，只修改了少数翻译不当的地方
2008-12-22，针对 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>插件说明</strong><br />
- 一个非常不错的下载管理插件, 使用也很方便, 自己把它给汉化了. <img src='http://hpyer.cn/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
- 如果使用过程中发现中文显示不正常, 请参阅《<a href="http://hpyer.cn/solution-for-chinese-title-in-download-monitor.html">Download Monitor 中中文标题显示为 ???? 的解决办法</a>》<br />
- <strong>中文帮助文档，请查看《<a href="http://hpyer.cn/wordpress-download-monitor-documentation-zh-cn.html">Wordpress Download Monitor 中文帮助文档</a>》</strong></p>
<p><strong>插件作者</strong><br />
- 原作: Mike Jolley (<a href="http://blue-anvil.com/" target="_blank">http://blue-anvil.com/</a>)<br />
- 汉化: Hpyer (<a href="http://hpyer.cn/">http://hpyer.cn/</a>)<br />
<span id="more-6"></span><br />
<strong>最新版本</strong></p>
<ul>
<li>- 3.3.3（测试版）</li>
<li>- 增加多分类支持</li>
<li>- 合并且改良了文件添加页面</li>
<li>- 从服务器目录中批量添加文件</li>
<li>- 更改新的文件存放目录，将存放于 wp-content/文件上传目录/downloads/ 中，并再以年、月进行区分。例如：wp-content/uploads/downloads/2010/02/</li>
<li>- 修正其它 bugs</li>
<li><a href="http://dev.wp-plugins.org/log/download-monitor/" target="_blank">查看更多插件的更新日志</a>（英文）</li>
</ul>
<p><strong>立即下载</strong></p>
<ul>
<li><a href=http://hpyer.cn/files/download-monitor-3-zh_cn.zip>Download Monitor 3 简体中文完整版</a> &nbsp; [v3.3.3.5 - 688.87 KB - 1516 Hits]<br /><p>- 英文原版 ＋ 简体中文语言包<br />
- 2010年03月04日更新</p>
</li>
<li><a href=http://hpyer.cn/files/download-monitor-3-zh_cn-language-pack.zip>Download Monitor 3 简体中文语言包</a> &nbsp; [v1.5 - 27.03 KB - 438 Hits]<br /><p>Download Monitor 3.3.3.5 的简体中文语言包<br />
<strong>重要：从3.1.1版本开始，所有的语言包都需要放到download-monitor/languages目录下！</strong></p>
</li>
<li><del datetime="2010-03-04T01:42:43+00:00"><a href=http://hpyer.cn/files/wp-plugin-DownloadMonitor-all-in-one.zip>Download Monitor 2 简体中文完整版</a> &nbsp; [v2.2.3 - 141.02 KB - 807 Hits]<br /><p>英文原版＋简体中文语言文件</p>
</del></li>
<li><del datetime="2010-03-04T01:42:43+00:00"><a href=http://hpyer.cn/files/wp-plugin-DownloadMonitor-zh_CN-pack.zip>Download Monitor 2 简体中文语言包</a> &nbsp; [v1.6.2 - 15.07 KB - 312 Hits]<br /><p>Download Monitor 2.2.3 的简体中文语言包</p>
</del></li>
<li><a href="http://wordpress.org/extend/plugins/download-monitor/download/" target="_blank">早期版本</a></li>
</ul>
<p><strong>汉化日志</strong></p>
<ul>
<li>2010-03-04，由于MJ迟迟没有发布3.3.3的正式版，很多朋友又很希望能体验新版本的功能，所以今天还是先放出3.3.3.5的汉化版，以供大家使用。</li>
<li>2010-02-24，很久没更新了，先跟大家道个歉。由于目前 3.3.3 版的 DM 还处在测试阶段，所以暂时不考虑放出简体中文包，待正式版发布后，小站会尽快更新发布。谢谢大家的支持！</li>
<li>2009-06-17，针对 3.1.3 此次语言包只修正了一处翻译不当。感谢<a href="http://hexic.cn/" target="_blank">http://hexic.cn</a>的站长</li>
<li>2009-06-13，针对 3.1.1 更新了语言包。从该版本开始，语言包需要被放在download-monitor/languages目录下</li>
<li>2009-05-13，针对 3.0.7 更新了语言包</li>
<li>2009-04-15，针对 3.0.5 更新了语言包</li>
<li>2009-03-29，针对 3.0.4 更新了语言包</li>
<li>2009-03-24，针对 3.0.3 更新了语言包，修正了部分翻译</li>
<li>2009-03-19，针对 3.0.1 更新了语言包</li>
<li>2009-01-16，针对 2.2.3 更新了语言包，只修改了一处</li>
<li>2009-01-07，针对 2.2.2 更新了语言包，与 2.2.1 的语言包没有大的出入，只修改了少数翻译不当的地方</li>
<li>2008-12-22，针对 2.2.1 更新了语言包。由于近期没什么时间上网，所以更新的时间晚了几天，加上翻译的时间比较匆忙，可能有部分翻译不到位的地方。对此造成不便，请大家原谅！</li>
<li>2008-08-02，针对 2.1.4 更新了一下。</li>
<li>2008-07-14，针对 2.1.3 更新了一下。</li>
<li>2008-06-22，针对 2.1.1 更新了一下。最近比较热衷于游戏，所以一下子没注意到 2.1 的发布。</li>
<li>2008-04-29，晚上一上QQ，发现“石博㊣”兄弟的留言，原来是完整包的下载地址弄错了，在此向大家表示歉意，也向“石博㊣”兄弟表示感谢！然后又发现插件正好有新版本，于是针对 2.0.9 更新了一下。</li>
<li>2008-04-27，其实 25 号的时候在原作的网站上已经看到他更新了，但是一直没拿到新版本，so 今天才发布。原先一直以为本插件是可以添加其它网站的下载链接（也就俗称的盗链吧~），前些天试了下发现不行，所以重新翻译了下，把“添加网络下载”改成“添加已有下载”，借此次更新的机会重新发布一下了。另外说明下，因为页面和功能上没什么大的改进，所以原先的针对 2.0.6 版的语言包也是适用。</li>
<li>2008-04-04, 针对 2.0.5 和 2.0.6 的改进, 修正语言包. 不知道是不是 2.5 的 bug, 插件页居然没有提示我更新插件, so 更新晚了, 抱歉.</li>
<li>2008-03-26, 针对 2.0.4 的改进, 修正语言包</li>
<li>2008-03-16, 修正部分翻译时的不妥之处</li>
<li>2008-03-15, 针对 2.0.3 的改进, 修正语言包</li>
<li>2008-03-13, 创建插件的简体中文语言包</li>
</ul>
<p><strong>安装/升级</strong></p>
<p><strong>全新安装</strong></p>
<ol>
<li>解压缩您下载到压缩包</li>
<li>上传/复制 download-monitor 文件夹到 wp-content/plugins 目录下</li>
<li>到“插件”页启用插件</li>
<li>到“下载管理”进行操作</li>
</ol>
<p><del datetime="2010-03-04T01:42:43+00:00"><strong>升级安装（针对2.0.9版以前用户）</strong></p>
<ol>
<li><strong>禁用已安装的旧版本</strong></li>
<li>解压缩您下载到压缩包 (可以在第一步之前)</li>
<li>上传/复制 download-monitor 文件夹到 wp-content/plugins 目录下。</li>
<li>到插件管理页启用插件</li>
<li>到“管理”-&gt;“下载管理”进行操作</li>
<li><strong>需要注意的地方：插件原来使用的是 wp-download_monitor 文件夹，而现在新版本用的是 download-monitor，所以您可能需要将 wp-download_monitor 文件夹下 user_uploads 文件夹内的所有东西移到 wp-content/uploads 文件夹下，然后将 wp-download_monitor 文件夹删除，以免混淆。</strong></li>
<li><strong>由于此次升级略有点特殊，所以强烈建议您在升级之前，将 wp-download_monitor 文件夹及文件夹下的所有东西进行备份，以免数据丢失！</strong></li>
<li><strong>必须重新保存永久链接（固定链接）的设置！否则点击下载链接可能会出现 404 错误。</strong></li>
</ol>
<p></del></p>
]]></content:encoded>
			<wfw:commentRss>http://hpyer.cn/wordpress-plugin-download-monitor.html/feed</wfw:commentRss>
		<slash:comments>113</slash:comments>
		</item>
	</channel>
</rss>
