<?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>NeoEase &#187; WordPress</title>
	<atom:link href="http://www.neoease.com/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neoease.com</link>
	<description>MG12&#039;s Blog - Just Another WordPress Blog</description>
	<lastBuildDate>Sun, 08 Jan 2012 03:00:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>使用图床还是将图片上传到 WordPress?</title>
		<link>http://www.neoease.com/thirdparty-image-library-or-wordpress-gallery/</link>
		<comments>http://www.neoease.com/thirdparty-image-library-or-wordpress-gallery/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 13:24:26 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Gallery]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=2206</guid>
		<description><![CDATA[最近被频繁问到: 使用图床还是将图片上传到 WordPress? 我以前也想过这个问题, 可以将拿出来说说, 一起来讨论一下他们的优缺点和选择的思考. 首先, 什么是图床? 就是使用第三方的服务托管图片 (如: Flickr), 在自己网站上引用这些图片. 那么将图片上传到 WordPress 是什么意思? 即使用 WordPress 的 Media 功能, 在后台上传图片, 并在博客中使用. 使用图床 很多朋友喜欢使用图床, 尤其是写博客的各位. 为什么使用图床? 原因不外乎以下两种: 流量不足. 很多人购买虚拟主机写博客, 每个月只有 20G 到 50G 空间, 不得不使用图床. 图片便于管理. 一般图床有评论, 分类, 分享等完善的管理和分享功能. 使用图床的人会想方设法去寻觅一个适合自己的图片, 一般都是以上原因. 对我来说, 主要是流量问题, 我使用图床, 每个月还需要 90 多 GB 的流量, 如果直接使用 WordPress 的 Media 功能, 那就等着交附加流量的费用吧. [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
最近被频繁问到: <strong>使用图床还是将图片上传到 WordPress?</strong> 我以前也想过这个问题, 可以将拿出来说说, 一起来讨论一下他们的优缺点和选择的思考.
</p>
<p>
首先, 什么是图床? 就是使用第三方的服务托管图片 (如: Flickr), 在自己网站上引用这些图片. 那么将图片上传到 WordPress 是什么意思? 即使用 WordPress 的 Media 功能, 在后台上传图片, 并在博客中使用.
</p>
<p><span id="more-2206"></span></p>
<h3>使用图床</h3>
<p>
很多朋友喜欢使用图床, 尤其是写博客的各位. 为什么使用图床? 原因不外乎以下两种:
</p>
<ol>
<li>流量不足. 很多人购买虚拟主机写博客, 每个月只有 20G 到 50G 空间, 不得不使用图床.</li>
<li>图片便于管理. 一般图床有评论, 分类, 分享等完善的管理和分享功能.</li>
</ol>
<p>
使用图床的人会想方设法去寻觅一个适合自己的图片, 一般都是以上原因. 对我来说, 主要是流量问题, 我使用图床, 每个月还需要 90 多 GB 的流量, 如果直接使用 WordPress 的 Media 功能, 那就等着交附加流量的费用吧.
</p>
<p>
如果我不用为流量操心, 还会不会继续使用图床? 不会. 为什么? 请继续往下看.
</p>
<h3>图片上传到 WordPress</h3>
<p>
WordPress 2.5 开始支持画廊 (Gallery) 功能, 可以通过主题的 image.php 内建图库. 由那时开始图片不仅仅是图片了. 如果使用 WordPress 上传一张图片, 数据库将会生成一条类型为 <em>attachment</em> 的 post 数据. WordPress 对图片的定位不是附件, 而是另一种文章类型.
</p>
<p>
即使不是图片展示类型的网站, 内建的 WordPress 也可能为网站带来巨大的流量, 尤其是产品相关的网站. 如果某人想知道现在的花瓶有哪些外观, 他很可能使用 Google 或者百度的图片搜索功能. 如果你的网站内建图库, 并且相关性和文字描述做得足够好, 很可能被搜索到, 而且图片搜索的转化率很高.
</p>
<p>
使用 WordPress 内建图库作为文章的大图页面, 也应该是 <a href="http://www.neoease.com/wordpress-seo-tips/">WordPress SEO</a> 中重要的一环, 使用的时候需要考虑一下几点.
</p>
<ol>
<li>填写清晰, 带关键字的图片 alt 和 title.</li>
<li>将图片放在文章中相关性高的段落前后.</li>
<li>如果使用多语言, 在不同的语言版本使用不一样的图片描述. (否则搜索引擎无法定位主页面)</li>
<li>避免使用超大的图片, 以影响页面加载, 图片备份和网站流量.</li>
</ol>
<h3>总结</h3>
<p>
本文认为, 在忽略流量, 管理等因素情况下. 本文认为将图片上传到 WordPress 比使用图床有更多好处. 但你需要做好图片页面和图片描述的优化.
</p>
<p>
最近我在为换主机做准备, 迁 VPS 后, 流量不再那么紧张, 所以重新考虑内置图片, 以到达更好的 SEO 效果.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2206" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wordpress-seo-tips/" rel="bookmark">WordPress SEO 技巧</a><!-- (4.9)--></li>
		<li><a href="http://www.neoease.com/blocks2-for-yo2/" rel="bookmark">WordPress 主题 Blocks2 (YO2 版本)</a><!-- (4.8)--></li>
		<li><a href="http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/" rel="bookmark">为 WordPress 的评论链接加上 nofollow</a><!-- (4.5)--></li>
		<li><a href="http://www.neoease.com/elegant-box-for-yo2/" rel="bookmark">WordPress 主题 Elegant Box (YO2 版本)</a><!-- (4.3)--></li>
		<li><a href="http://www.neoease.com/theme-style-switcher-1/" rel="bookmark">在主题上添加风格切换功能 (1)</a><!-- (4.3)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/thirdparty-image-library-or-wordpress-gallery/feed/</wfw:commentRss>
		<slash:comments>77</slash:comments>
		</item>
		<item>
		<title>通过 IP 区分不同国家的用户</title>
		<link>http://www.neoease.com/get-user-country-by-ip-address/</link>
		<comments>http://www.neoease.com/get-user-country-by-ip-address/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 11:55:58 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Geo IP]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Location]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=2163</guid>
		<description><![CDATA[为什么要在网站上通过 IP 区分来自不同国家用户? 这是为了让不同的国度和习惯的访客看到不一样的信息, 避免误导用户产生多余的交互行为或者因为页面的不合理而感到不爽. 上图是最近我在顶部放置的广告 banner. 上方红色的是某网站圣诞节促销活动的 Affiliate 广告, 中国大陆之外地区的访客可以看到; 下方蓝色的是最新发布的与我同行 Apply App 应用广告, 只有中国大陆地区的访客可以看到. 区分访客国家有什么用? 这里是几个我利用该功能的例子. 区分网站功能 这个博客有翻译文章的功能, 这是为了方便海外访客阅读文章, 但对中国人显得十分多余. 所以我通过 IP 判断国家, 对中国大陆地区屏蔽翻译功能. 区分展示广告 我在网站侧边栏放有广告, 很多中文广告对海外流量来说毫无意义, 所以我进行区分展示. 中国大陆地区在侧边栏最下方看到的是拿福能的广告, 而其他地区看到的是 Google 的广告. hostucan 是我的一个广告主, 有英文网站, 也有中文网站, 所以我可以向他提供区分展示服务, 免得浪费流量. 屏蔽布点服务 海外有很多好的服务平台, 在网站上布点即可采集数据和分享文章. 但很不幸, 因为某些原因, 他们在国内展示效果并不好, 不但没有起到应有效果, 还让页面加载时间变长. 可以对大陆访客屏蔽这些布点. 在 PHP 通过 IP 区分国家 如何用 [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
为什么要<strong>在网站上通过 IP 区分来自不同国家用</strong>户? 这是为了让不同的国度和习惯的访客看到不一样的信息, 避免误导用户产生多余的交互行为或者因为页面的不合理而感到不爽.
</p>
<p>
<img class="sided" src="http://photo.tuhigh.com/pics/1145/1104/187252t1320417588878_o.jpg" alt="通过 IP 判断用户所在地区, 区分显示广告" />
</p>
<p>
上图是最近我在顶部放置的广告 banner. 上方红色的是某网站<a href="http://www.anrdoezrs.net/click-5524845-10577840" rel="nofollow external">圣诞节促销活动</a>的 Affiliate 广告, 中国大陆之外地区的访客可以看到; 下方蓝色的是最新发布的<a href="http://15tongxing.com/d" rel="nofollow external">与我同行 Apply App 应用</a>广告, 只有中国大陆地区的访客可以看到.
</p>
<p><span id="more-2163"></span></p>
<h3>区分访客国家有什么用?</h3>
<p>
这里是几个我利用该功能的例子.
</p>
<p>
<strong>区分网站功能</strong><br />
这个博客有翻译文章的功能, 这是为了方便海外访客阅读文章, 但对中国人显得十分多余. 所以我通过 IP 判断国家, 对中国大陆地区屏蔽翻译功能.
</p>
<p>
<strong>区分展示广告</strong><br />
我在网站侧边栏放有广告, 很多中文广告对海外流量来说毫无意义, 所以我进行区分展示. 中国大陆地区在侧边栏最下方看到的是<a href="http://www.neoease.com/nuffnang-challenge-1000/" rel="nofollow">拿福能</a>的广告, 而其他地区看到的是 Google 的广告. <a href="http://www.hostucan.cn/us/group/wordpress-hosting" rel="nofollow">hostucan</a> 是我的一个广告主, 有英文网站, 也有中文网站, 所以我可以向他提供区分展示服务, 免得浪费流量.
</p>
<p>
<strong>屏蔽布点服务</strong><br />
海外有很多好的服务平台, 在网站上布点即可采集数据和分享文章. 但很不幸, 因为某些原因, 他们在国内展示效果并不好, 不但没有起到应有效果, 还让页面加载时间变长. 可以对大陆访客屏蔽这些布点.
</p>
<h3>在 PHP 通过 IP 区分国家</h3>
<p>
如何用 PHP 通过 IP 区分国家和地区呢? <a href="http://www.maxmind.com/">Maxmind.com</a> 提供一套 GeoIP 的解决方案, 只需要简单几步即可在 PHP 中通过 IP 判断访客的国家.
</p>
<p>
<strong>1. 下载数据库和 PHP 库文件</strong>
</p>
<ul>
<li>下载 <a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz">GeoID.dat.gz</a>, 解压为 GeoIP.dat 文件.</li>
<li>下载 <a href="http://www.maxmind.com/download/geoip/api/php/geoip.inc">geoip.inc</a>.</li>
</ul>
<p>
<strong>2. 通过 PHP 代码获取国家信息</strong><br />
以下是一段示范代码, 演示如何获取国家代号和国家名称.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 引入 PHP 库文件</span>
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;geoip.inc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 打开本地数据库, 数据保存在 GeoIP 文件中.</span>
<span style="color: #000088;">$geoData</span> <span style="color: #339933;">=</span> geoip_open<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'GeoIP.dat'</span><span style="color: #339933;">,</span> GEOIP_STANDARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 获取国家 IP</span>
<span style="color: #000088;">$countryCode</span> <span style="color: #339933;">=</span> geoip_country_code_by_addr<span style="color: #009900;">&#40;</span><span style="color: #000088;">$geoData</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 获取国家名称</span>
<span style="color: #000088;">$countryName</span> <span style="color: #339933;">=</span> geoip_country_name_by_addr<span style="color: #009900;">&#40;</span><span style="color: #000088;">$geoData</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 关闭本地数据库</span>
geoip_close<span style="color: #009900;">&#40;</span><span style="color: #000088;">$geoData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>在 WordPress 中通过 IP 区分国家</h3>
<p>
既然 PHP 上使用没问题, WordPress 肯定也是 Okay 的. 看看我是怎么使用的.
</p>
<p>
<strong>1. 放置数据库文件</strong><br />
将 GeoIP.dat 解压到 WordPress 根目录中. (你可以在这个目录找到 wp-config.php 或者 wp-config-sample.php 文件)
</p>
<p>
<strong>2. 编写调用接口</strong><br />
在主题目录中新建文件夹 include, 将 geoip.inc 放置在新建文件夹中. 并在该文件夹新建文件 geoip.php 文件内容如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'geoip.inc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$countryCode</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$geoData</span> <span style="color: #339933;">=</span> geoip_open<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'GeoIP.dat'</span><span style="color: #339933;">,</span> GEOIP_STANDARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$countryCode</span> <span style="color: #339933;">=</span> geoip_country_code_by_addr<span style="color: #009900;">&#40;</span><span style="color: #000088;">$geoData</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
geoip_close<span style="color: #009900;">&#40;</span><span style="color: #000088;">$geoData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
这里只取国家代号作为判别依据. 并且国家代号是全局变量, 以避免页面多处判断需要反复访问 GeoIP.dat 获取信息, 减少程序开销.
</p>
<p>
<strong>2. 调用接口, 获取国家代号</strong><br />
3. 打开 header.php 文件, 在文件顶部加入代码如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'include/geoip.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
<strong>4. 使用国家代号</strong><br />
在主题中调用代码, 例子如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$countryCode</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$countryCode</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'CN'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// 中国大陆地区执行的代码</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$countryCode</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'US'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// 美国地区执行的代码</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// 中国大陆和美国以外地区执行的代码</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>总结</h3>
<p>
通过 IP 判断访客来源十分精准的, 现在一些外贸网站都是通过这个方法向用户进行展示区分, 比如美国地区的用户默认看到美国能买到的商品和美国物流信息. 但不是百分之百的准确, 比如某人常年翻墙, 那他可能一直看不到本国的信息. 至于是否需要区分处理, 网站主要有所考虑.
</p>
<p>
可能有人会问, 加这么个东西, 性能如何? 会不会要求强大的服务器? 我测试过, 正常的服务器上几乎不影响页面加载性能, 可以看看这个博客的速度. 如果不放心, 自己测一下.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2163" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wordpress-thumb-trick/" rel="bookmark">巧用 WordPress 缩略图</a><!-- (3.9)--></li>
		<li><a href="http://www.neoease.com/update-feedsky-subscribe-number-everyday/" rel="bookmark">每日同步 Feedsky 订阅数</a><!-- (3.2)--></li>
		<li><a href="http://www.neoease.com/wp-mobile-themes/" rel="bookmark">手机主题调度插件 WordPress Mobile Themes</a><!-- (2.8)--></li>
		<li><a href="http://www.neoease.com/spliting-blogroll-to-2-columns-03/" rel="bookmark">将 Blogroll 分为两栏 (3)</a><!-- (2.8)--></li>
		<li><a href="http://www.neoease.com/wp-easyarchives/" rel="bookmark">文章存档插件 WP-EasyArchives</a><!-- (2.7)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/get-user-country-by-ip-address/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>WordPress 面包屑插件 Breadcrumbs</title>
		<link>http://www.neoease.com/wordpress-plugin-breadcrumbs/</link>
		<comments>http://www.neoease.com/wordpress-plugin-breadcrumbs/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 14:31:36 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Breadcrumb]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=2152</guid>
		<description><![CDATA[面包屑对用户体验和 SEO 都相当重要, 但是 WordPress 并没有提供原生的面包屑组件, 实现相当麻烦. 曾经我介绍过一款名为 Breadcrumb NavXT 的 WordPress 面包屑插件, 本文我将再大家介绍一个, Breadcrumbs. Breadcrumbs 与 Breadcrumb NavXT 的区别 从界面上看, 两插件并没有太多区别, 可以在 WordPress 架构内的所有页面加上面包屑. 从功能来看, Breadcrumb NavXT 更加强大. 可以针对特定类型页面进行设定, 并且提供两种结构的页面输出. 从 SEO 来看, Breadcrumbs 更加合理. 由于插件作者 Yoast 的 SEO 功底很强大, 插件在这方面肯定会有更多关注. 可以选择在 Home 链接加上 nofollow, 在 Home 链接和后面的索引之间加上特定的页面 (如: 我加上了 All Categories 的页面链接). Breadcrumbs [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
面包屑对用户体验和 <a href="http://www.neoease.com/wordpress-seo-tips">SEO</a> 都相当重要, 但是 WordPress 并没有提供原生的面包屑组件, 实现相当麻烦. 曾经我介绍过一款名为 <a href="http://www.neoease.com/wordpress-plugin-breadcrumb-navxt/">Breadcrumb NavXT</a> 的 WordPress 面包屑插件, 本文我将再大家介绍一个, <strong><a href="http://yoast.com/wordpress/breadcrumbs/" rel="external">Breadcrumbs</a></strong>.
</p>
<p>
<img class="sided" src="http://cdn.yoast.com/wp-content/uploads/2008/08/WordPress-Breadcrumbs-example.jpg" alt="WordPress 面包屑插件 Breadcrumbs" /><br />
<span id="more-2152"></span>
</p>
<h3>Breadcrumbs 与 Breadcrumb NavXT 的区别</h3>
<ol>
<li>从界面上看, 两插件并没有太多区别, 可以在 WordPress 架构内的所有页面加上面包屑.</li>
<li>从功能来看, Breadcrumb NavXT 更加强大. 可以针对特定类型页面进行设定, 并且提供两种结构的页面输出.</li>
<li>从 SEO 来看, Breadcrumbs 更加合理. 由于插件作者 Yoast 的 SEO 功底很强大, 插件在这方面肯定会有更多关注. 可以选择在 Home 链接加上 nofollow, 在 Home 链接和后面的索引之间加上特定的页面 (如: 我加上了 All Categories 的页面链接).</li>
</ol>
<h3>Breadcrumbs 插件的缺陷</h3>
<ol>
<li>如果文章被分配到多个类目中, 只有一个类目有效, 插件更具字母 A 到 Z 的循序选择头一个类目作为面包屑路径.</li>
<li>文章详细页面的面包屑中包含文章标题, 这个多余了.</li>
</ol>
<p>
这里提及的两个问题 Breadcrumb NavXT 插件也有. 前一个问题我没有解决, 因为影响不到我的使用, 也没想过怎样去弄; 后一个问题我解决了, 除了除掉文章详细页面的文章标题, 还修改了面包屑中其他链接的标签结构, 比如: 为 SEO 将最后一个面包屑节点改成 h2.
</p>
<h3>Breadcrumbs 插件的使用</h3>
<p>
下载插件请移步 <a href="http://wordpress.org/extend/plugins/breadcrumbs/" rel="external">WordPress 插件中心的插件页面</a>.
</p>
<p>
在 WordPress 主题中插入代码调用插件, 如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yoast_breadcrumb'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		yoast_breadcrumb<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
调用插件的方法有三个参数. 前两个是输出在前后的 HTML 片段; 第三个参数指定返回字符串还是输出页面, 如果第三个参数是 true 代码直接输出页面, 如果是 false 返回字符串, 默认是 true.
</p>
<h3>Breadcrumbs 插件的改进</h3>
<p>
我使用的是 Breadcrumbs, 因为功能简单, 代码少, 容易改. 为了 SEO 效果, 突出页面关键字, 避免出现重复链接, 我对插件进行了一些修改.
</p>
<ol>
<li>将文章详细页面的面包屑中出现的文章标题去掉, 因为这个与文章标题重复.</li>
<li>在面包屑的 Home 链接和类目链接之间加上 All Categories 的链接, 便于区分文章详细页面和独立页面的路径. (独立页面是不存在分类的.)</li>
<li>在 Home 链接和 All Categories 页面链接加上 nofollow. Home 这个词跟你在首页没有关系, 而且页面 Logo 也链向首页, 没必要重复一下让爬虫混淆; 我的顶部导航中已经有 All Categories 的入口, 没有必要重复一下.</li>
<li>将存档页面的面包屑最后一个词改为 h1, 因为它是整个页面的核心关键字. 比如: 现有存档页面面包屑 Home &gt; All Categories &gt; WordPress, 我会将 WordPress 改成 h1. 因为这里展示的是 WordPress 类目下的文章列表, 与其关系最大, 我将这个当成页面的标题来处理.</li>
<li>将文章详细页面的面包屑最后一个链接改为 h2. 在我的这个博客中, 文章详细页面没有指定分类链接, 其实我是将这个功能与面包屑的合并了, 面包屑的最后一个链接就是该文章的分类链接. 除非有十分重要的副标题存在, 由于标签和分类是文章之间联系的桥梁, 可以仅此于标题给 h2.</li>
<li>将面包屑中的 &raquo; 改为 &gt;, 纯粹觉得不好看.</li>
</ol>
<h3>总结</h3>
<p>
面包屑很总要, 强烈建议用上. Breadcrumb NavXT 和 Breadcrumbs 是目前最受欢迎的两个 WordPress 面包屑插件, 看似不一样, 实际区别不大, 都很好用.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2152" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wordpress-plugin-breadcrumb-navxt/" rel="bookmark">WordPress 面包屑插件 Breadcrumb NavXT</a><!-- (27)--></li>
		<li><a href="http://www.neoease.com/wordpress-breadcrumb-navigation/" rel="bookmark">WordPress 的文章导航</a><!-- (9.3)--></li>
		<li><a href="http://www.neoease.com/wordpress-seo-tips/" rel="bookmark">WordPress SEO 技巧</a><!-- (9.3)--></li>
		<li><a href="http://www.neoease.com/show-different-widgets-in-wordpress-sidebar/" rel="bookmark">WordPress 不同页面显示不一样的侧边栏</a><!-- (7)--></li>
		<li><a href="http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/" rel="bookmark">为 WordPress 的评论链接加上 nofollow</a><!-- (5.4)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-plugin-breadcrumbs/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>手机主题调度插件 WordPress Mobile Themes</title>
		<link>http://www.neoease.com/wp-mobile-themes/</link>
		<comments>http://www.neoease.com/wp-mobile-themes/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 16:35:31 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Release]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=2091</guid>
		<description><![CDATA[允许用户为使用手机浏览的访客选择另一套主题. 该手机主题不会影响桌面 (默认) 主题的功能和效果, 但会在主流的手机浏览器 (Safari Mobile, Android 浏览器, UC 浏览器, ...) 上显示选择的手机主题. 适用版本 WordPress 3.0 或以上 插件下载 WordPress Mobile Themes 安装方法 将压缩包解压到 {WordPress 根目录}/wp-content/plugins/. 登录你的 WordPress 后台, 到 Plugins 页面激活插件 WordPress Mobile Themes. 到 Appearance->Mobile Themes 页面修改插件设置. 插件本地化 此版本支持英文和简体中文, 其中英文是默认设置. 若要使用简体中文, 请执行以下步骤: 1. 打开 WordPress 根目录的文件 wp-config.php. 2. 查找 define ('WPLANG', ''); 并修改为 define [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
允许用户为使用手机浏览的访客选择另一套主题. 该手机主题不会影响桌面 (默认) 主题的功能和效果, 但会在主流的手机浏览器 (Safari Mobile, Android 浏览器, UC 浏览器, ...) 上显示选择的手机主题.
</p>
<p>
<img class="sided" src="http://wordpress.org/extend/plugins/wp-mobile-themes/screenshot-1.png" alt="最新评论, Recent Comment, WordPress, WP, 插件" width="600" />
</p>
<p><span id="more-2091"></span></p>
<h3>适用版本</h3>
<p>
WordPress 3.0 或以上
</p>
<h3>插件下载</h3>
<p>
<a href="http://downloads.wordpress.org/plugin/wp-mobile-themes.zip">WordPress Mobile Themes</a>
</p>
<p><!--more--></p>
<h3>安装方法</h3>
<ul>
<li>将压缩包解压到 {WordPress 根目录}/wp-content/plugins/.</li>
<li>登录你的 WordPress 后台, 到 Plugins 页面激活插件 WordPress Mobile Themes.</li>
<li>到 Appearance->Mobile Themes 页面修改插件设置.</li>
</ul>
<h3>插件本地化</h3>
<p>
此版本支持英文和简体中文, 其中英文是默认设置. 若要使用简体中文, 请执行以下步骤:<br />
1. 打开 WordPress 根目录的文件 <code>wp-config.php</code>.<br />
2. 查找 <code>define ('WPLANG', '');</code> 并修改为 <code>define ('WPLANG', 'zh_CN');</code>.
</p>
<h3>更新日志</h3>
<p>
<a rel="nofollow" href="http://wordpress.org/extend/plugins/wp-mobile-themes/changelog/">Change Log</a></p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2091" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wp-recentcomments/" rel="bookmark">最新评论插件 WP-RecentComments</a><!-- (23.9)--></li>
		<li><a href="http://www.neoease.com/wp-easyarchives/" rel="bookmark">文章存档插件 WP-EasyArchives</a><!-- (23.6)--></li>
		<li><a href="http://www.neoease.com/highslide4wp/" rel="bookmark">图片预览插件 Highslide4WP</a><!-- (21.3)--></li>
		<li><a href="http://www.neoease.com/feedsky-statistic/" rel="bookmark">WordPress 上的 Feedsky 统计插件</a><!-- (18.9)--></li>
		<li><a href="http://www.neoease.com/wp-multicollinks/" rel="bookmark">多栏友情链接插件 WP-MulticolLinks</a><!-- (18.3)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wp-mobile-themes/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>WordPress SEO 技巧</title>
		<link>http://www.neoease.com/wordpress-seo-tips/</link>
		<comments>http://www.neoease.com/wordpress-seo-tips/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 02:02:42 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1195</guid>
		<description><![CDATA[本文分享了一些 WordPress  相关的 SEO 优化技巧, 帮助网友了解 SEO 相关技能, 提升 WordPress 网站的页面质量, 便于搜索引擎爬取和分析.<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
随着搜索引擎大兴, 排列在前的网站引入大量流量. 无论是搜索页面的广告还是查出来的结果, 与搜索者的目标匹配度都比较高 (如果搜索引擎足够智能), 所以通过搜索引擎而来的访客很可能会从网站上得到他想要的东西, 并记住这个网站. 也就是说, 搜索引擎会带来很多有价值的流量, 所以花点时间针对搜索引擎优化一下 WordPress 博客也是值得的. 本文将为你分享一些 <strong>WordPress SEO 技巧</strong>.
</p>
<p>
以前我没有花太多时间做搜索引擎优化, 搜索引擎收录效果不是很好. 去年二月我终于为博客搞了一下 SEO, 写下这个文章. 一年半以来陆续进行了更多 SEO 优化, 博客文章写得不多了, 流量却有增无减, 网站也重回 PageRank 7, 效果相当不错的. 这次我根据自己的 WordPress SEO 方案更新了本文的内容.
</p>
<p><span id="more-1195"></span></p>
<p>
我不是什么 SEO 高手, 但作为一个搞搜索的前端开发, 或多或少知道一点, 折腾一下算是自我陶醉, 高人请绕道前行.
</p>
<h3>目录</h3>
<ul>
<li><a href="#blog-title">优化博客副标题</a></li>
<li><a href="#different-page-title">区分显示页面标题</a></li>
<li><a href="#keywords-and-description">Keywords 和 Description</a></li>
<li><a href="#breadcrumbs">定义面包屑</a></li>
<li><a href="#head-tags-and-strong-tag">使用 h1, h2, h3, strong 标签</a></li>
<li><a href="#chenge-title-for-related-posts">将 Related Post 改为 More posts about XXX</a></li>
<li><a href="#irrelevant-content">与文章无关内容后移</a></li>
<li><a href="#css-and-javascript-files">消灭内嵌 CSS 和内嵌 JavaScript</a></li>
<li><a href="#read-more">为 Read more (阅读全文) 链接加上 nofollow</a></li>
<li><a href="#no-welcome-page">不要制作欢迎页面</a></li>
<li><a href="#post-list">优化文章列表页面</a></li>
<li><a href="#microformats-and-microdata">使用微格式和微数据</a></li>
<li><a href="#submit-sitemap">向 Google 提交 Sitemap</a></li>
<li><a href="#wordpress-image-pages">使用 WordPress 内建图库, 并增加图片展示页面</a></li>
</ul>
<h3 id="blog-title">优化博客副标题</h3>
<p>
副标题 (slogan), WordPress 中称为 tagline. 它与博客标题不一样, 可能会承载一些描述博客的文字, 优化一下可以利用起来. 如我的副标题是 "mg12's Blog - Just Another WordPress Blog", 其中的 WordPress Blog 被我设置为 h1. 因为我想告诉爬虫, 这是一个关于 WordPress 的博客.
</p>
<h3 id="different-page-title">区分显示页面标题</h3>
<p>
页面的标题不要包含博客名称. WordPress 标题一般会用到 bloginfo('name') 和 wp_title() 两部分, 前者是博客名称, 后者是文章标题 (如果标题不存在则不显示). 经典主题和默认主题输出标题用的代码如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;title&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;laquo;'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'right'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;</pre></div></div>

<p>
输出的标题结构是 "文章标题 &raquo; 博客名称".
</p>
<p>
除非你的标题和文章内容相关度比较高, 否则这样的标题对 SEO 显然是不好的. 标题是爬虫认为重要的内容之一, 如果标题中包含了与文章内容无关的信息, 多少会对该页面有所影响.
</p>
<p>
那应该怎么弄呢? 我们可以对不同类型的页面进行区分, 我的实现代码如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;title&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #666666; font-style: italic;">// 如果是首页和文章列表页面, 显示博客标题</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_front_page<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> is_home<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
		bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果是文章详细页面和独立页面, 显示文章标题</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_single<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> is_page<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		wp_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果是类目页面, 显示类目表述</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_category<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%1$s 类目的文章存档'</span><span style="color: #339933;">,</span> single_cat_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果是搜索页面, 显示搜索表述</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_search<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%1$s 的搜索结果'</span><span style="color: #339933;">,</span> wp_specialchars<span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果是标签页面, 显示标签表述</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_tag<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%1$s 标签的文章存档'</span><span style="color: #339933;">,</span> single_tag_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果是日期页面, 显示日期范围描述</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_day<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> get_the_time<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y年n月j日'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_year<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> get_the_time<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y年'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> get_the_time<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y年n月'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%1$s的文章存档'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 其他页面显示博客标题</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/title&gt;</pre></div></div>

<h3 id="keywords-and-description">Keywords 和 Description</h3>
<p>
Keywords 为搜索引擎提供网页包含的核心内容, Description 则为搜索引擎提供网页的描述信息. <a href="http://www.neoease.com/themes/" rel="nofollow">我发布的主题</a>曾经包括了对 keywords 和 description 的处理, 但因为一些 SEO 插件发生冲突, 在较新的版本中已经去除. 笔者认为 WordPress 的很多所谓 SEO 插件做得并不到位, 对中文博客支持都很差, 自己修改一下效果可能更好.
</p>
<p>
以下是我对 keywords, description 和页面标题的处理规则, 实现方法可以参考上一段关于页面标题的说明.
</p>
<table>
<thead>
<tr>
<th>页面类型</th>
<th>Keywords</th>
<th>Description</th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>首页 (front page)</td>
<td>自定义 keywords</td>
<td>自定义 description</td>
<td>博客标题</td>
</tr>
<tr class="even">
<td>文章列表页面 (index)</td>
<td>自定义 keywords</td>
<td>自定义 description</td>
<td>博客标题</td>
</tr>
<tr class="odd">
<td>文章详细页面 (single)</td>
<td>标签组合</td>
<td>摘要或者文章前 220 个字符<br />(截取文章需要特殊处理全角字符)</td>
<td>文章标题</td>
</tr>
<tr class="even">
<td>独立页面 (page)</td>
<td>标签组合</td>
<td>文章前 220 个字符<br />(截取文章需要特殊处理全角字符. 独立页面不支持摘要, 有特殊需要可以创建页面模板)</td>
<td>文章标题</td>
</tr>
<tr class="odd">
<td>类目存档页面</td>
<td>类目名称</td>
<td>XXX 类目的文章存档</td>
<td>XXX 类目的文章存档</td>
</tr>
<tr class="even">
<td>搜索页面</td>
<td>搜索关键字</td>
<td>XXX 的搜索结果</td>
<td>XXX 的搜索结果</td>
</tr>
<tr class="odd">
<td>标签存档页面</td>
<td>标签名称</td>
<td>XXX 标签的文章存档</td>
<td>XXX 标签的文章存档</td>
</tr>
<tr class="even">
<td>日期存档页面</td>
<td>日期</td>
<td>XXX 的文章存档</td>
<td>XXX 的文章存档</td>
</tr>
<tr class="odd">
<td>其他页面</td>
<td>留空</td>
<td>页面标题</td>
<td>博客标题</td>
</tr>
</tbody>
</table>
<p>
文章详细页面的描述一般取文章的前 220 个字符即可, 特别重要的页面和文章可以自定义摘要, 使其信息准确度更高. 如果存在摘要信息则使用摘要, 没有则使用前 220 个字符, 实现代码如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_excerpt</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$description</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_excerpt</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// utf8_trim 方法是为了在截取字符之前对字符串进行转义, 避免出现截取半个汉字的情况</span>
		<span style="color: #666666; font-style: italic;">// 参考文档: http://php-utf8.61924.nl/documentation/functions/utf8_trim.html</span>
		<span style="color: #000088;">$description</span> <span style="color: #339933;">=</span> utf8_trim<span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">220</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3 id="breadcrumbs">定义面包屑</h3>
<p>
面包屑在网站中起到导航的作用, 便于搜索引擎进行索引. 如果一个网站存在面包屑, 在 Google 中看到的是路径索引, 而不是文章链接, 如下图.
</p>
<p>
<img class="sided" src="http://www.googel.com//help/hc/images/webmasters_99170_rsreview.png" alt="有面包屑的页面在 Google 搜索结果上的展现效果" />
</p>
<p>
我介绍过两款 WordPress 面包屑插件, 分别是 <a href="http://www.neoease.com/wordpress-plugin-breadcrumb-navxt/">Breadcrumb NavXT</a> 和 <a href="http://www.neoease.com/wordpress-plugin-breadcrumbs/">Breadcrumbs</a>.
</p>
<h3 id="head-tags-and-strong-tag">使用 h1, h2, h3, strong 标签</h3>
<p>
h1 给予文章标题或者与网站相关性高的推广性内容, 而不是博客标题. 比如: 文章详细页面的 h1 给文章标题, 因为相关度最高.<br />
h2 是跟文章有关的描述式信息, 如面包屑, 分类和标签.<br />
h3 是其他类似内容, 如相关文章, 小标题.<br />
strong 给文章内的关键字. 比如: 本文第一段将 strong 放在 "WordPress SEO 技巧" 这个词组上.
</p>
<h3 id="chenge-title-for-related-posts">将 Related Post 改为 More posts about XXX</h3>
<p>
其中 XXX 是关键字及其链接, 本人建议使用分类或者标签链接代替. 从 SEO 优化的角度来说, 因为 Related 一词与几个文章的链接没有任何关系, 但标签与之相关度很高. (一般相关文章是通过相似标签来确定的.) 从用户体验的角度来说, 没有太多人留意你的 Tags 是什么, 不如将标签和相关文章结合现实. 阿里巴巴速卖通的产品详细页面也类似这样做的, 这是我 2009 年操刀搞上去的.
</p>
<h3 id="irrelevant-content">与文章无关内容后移</h3>
<p>
很多爬虫都会爬取全页进行分析, 但还有些爬虫只会分析页面的前 N 个字节的内容. 无论是曝光次数还是分析次序, 显然前面内容的权重相对会比较高. 为了爬虫有效的收录, 应该尽量将无关内容后移. 如 JavaScript 等可以在 DOM ready 时再执行.
</p>
<p>
这个博客顶部的很多与内容无关的内容其实都是放在页脚的, 如搜索栏, 订阅按钮都是放到页脚, 在 DOM ready 时通过 CSS 或者 JavaScript 重新定位来实现的.
</p>
<h3 id="css-and-javascript-files">消灭内嵌 CSS 和内嵌 JavaScript</h3>
<p>
内嵌的 CSS 和 JavaScript 可能带有一些关键字和链接, 而且拖慢页面加载速度, 影响爬虫收录. 尽量将这些写在外部文件中.
</p>
<p>
<strong>避免出现重复内容的文章</strong><br />
<a href="http://www.neoease.com/wordpress-27-comment-pages/" rel="nofollow">WordPress 的评论分页</a>可能导致多个重复内容的文章, 会将某些关键词的权重分散了, 有必要进行 SEO 优化.
</p>
<p>
关于 WordPress 评论的 SEO, 我已经在《<a href="http://www.neoease.com/paged-comments-seo/">对评论分页的 SEO</a>》写过处理方法. 后来又在《<a href="http://www.neoease.com/wordpress-comment-seo/">WordPress 评论 SEO</a>》中介绍了另一种处理方法, 该方法不需要借助插件.
</p>
<h3 id="read-more">为 Read more (阅读全文) 链接加上 nofollow</h3>
<p>
因为 Read more 链接的路径实际和文章标题相同, 没必要再多加一个文本与页面内容无关的链接. 再者, "Read more..." 在网站出现 N 多次, 可能会干扰爬虫. 后来我专门写了一个文章 Step-by-step 教你如何在 WordPress 进行修改, 请阅读《<a href="http://www.neoease.com/add-nofollow-to-read-more-link-on-wordpress/">为 WordPress 的 Read more 加上 nofollow</a>》.
</p>
<h3 id="no-welcome-page">不要制作欢迎页面</h3>
<p>
很多朋友喜欢把博客首页做成欢迎页面, 但因为大量链接链向首页, 它是最重要的页面, 应该尽量放置与博客相关的内容. 关于网站的首页, 我给两个建议.
</p>
<ol>
<li>直接使用文章列表页面作为首页, 如 NeoEase.com.</li>
<li>制作一个频繁更新内容的文章导航页面, 可以放置特色产品, 热门文章和最新评论等内容.</li>
</ol>
<h3 id="post-list">优化文章列表页面</h3>
<p>
经过我长期的试验, 切勿在文章列表页面展示所有文章内容. 如果你的文章直接相关度都很高 (比如: 全站都是写 SEO 相关的文章), 建议展现所有文章的摘要. 如果文章之间相关度不高 (比如: 像这个博客一样, 有时写 SEO, 有时写 WordPress, 有时写前端, 有时又招聘), 那么只展示前三个文章的摘要即可.
</p>
<p>
如果部分文章只显示标题, 可以动态加载文章以方便用户. 详细请参考《<a href="http://www.neoease.com/load-posts-dynamically/">WordPress 动态加载文章内容</a>》.
</p>
<h3 id="microformats-and-microdata">使用微格式和微数据</h3>
<p>
<a href="http://microformats.org/" rel="external">微格式</a>和<a href="http://dev.w3.org/html5/md/">微数据</a>都是为了语义化网页结构, 在网页上标记内容以描述特定类型的信息, 如评论, 事件, 商品等. 不用的是微格式使用 class 来语义化标签, 而微数据则是使用特定的标签. 两种方式 Google 都支持, 而微数据的适用范围更广, 使用方便, 更多内容请参考 <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=zh-Hans&#038;answer=99170" rel="nofollow external">Google 网站站长工具的文档</a> 和 <a href="http://schema.org" rel="nofollow external">schema.org</a> 上的例子.
</p>
<p>
我使用微格式对博客的评论进行了处理. 当文章内出现新的评论时, 搜索引擎会认为页面有所更新, 微格式和微数据可以令爬虫评论内容和时间更加敏感, 避免页面被认为是死页面.
</p>
<h3 id="submit-sitemap">向 Google 提交 Sitemap</h3>
<p>
WordPress 有很多自动生成 sitemap 的插件, <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/" rel="nofollow external">Google XML Sitemaps</a> 是我用过最好的一个, 按插件说明使用即可生成 sitemap 文件. 然后登录 <a href="http://www.google.com/webmasters/" rel="nofollow external">Google Webmaster Tools</a>, 并向 Google 提交网站的 sitemap XML 文件.
</p>
<h3 id="wordpress-image-pages">使用 WordPress 内建图库, 并增加图片展示页面</h3>
<p>
如果网站上的内容涉及视觉感官的内容, 比如: 地图, 产品和 Logo 设计, 建议使用 WordPress 的 Media 功能建立图库, 而不是库床. WordPress 2.5 之后的主题支持 image.php, 可以内建图片类型页面, 只要稍作优化, 可能为你的网站带来极大流量和更好的转化率.
</p>
<p>
我写了一篇<a href="http://www.neoease.com/thirdparty-image-library-or-wordpress-gallery/">关于选择 WordPress 内建图库和图床的文章</a>, 可以参考一下.
</p>
<h3>总结</h3>
<p>
以上几点仅为个人意见, 具体效果可以参考本博客, 如发现问题或有好的建议请务必提出. <img src='http://www.neoease.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
另外, 有些内容我没有提供具体的代码, 只是说了自己的想法或者做法. 如果你对其中某项有兴趣, 请在留言说明, 需求大的我会另起文章具体说明.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1195" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/add-nofollow-to-read-more-link-on-wordpress/" rel="bookmark">为 WordPress 的 Read more 加上 nofollow</a><!-- (8.1)--></li>
		<li><a href="http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/" rel="bookmark">为 WordPress 的评论链接加上 nofollow</a><!-- (7.9)--></li>
		<li><a href="http://www.neoease.com/wordpress-plugins-i-using/" rel="bookmark">使用中的 WordPress 插件</a><!-- (7.1)--></li>
		<li><a href="http://www.neoease.com/seo-links/" rel="bookmark">关于网站的链接优化</a><!-- (6.2)--></li>
		<li><a href="http://www.neoease.com/wordpress-comment-seo/" rel="bookmark">WordPress 评论 SEO</a><!-- (6)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-seo-tips/feed/</wfw:commentRss>
		<slash:comments>143</slash:comments>
		</item>
		<item>
		<title>WordPress 图片水印插件 - Watermark Reloaded</title>
		<link>http://www.neoease.com/wordpress-plugin-watermark-reloaded/</link>
		<comments>http://www.neoease.com/wordpress-plugin-watermark-reloaded/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 08:44:58 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Opacity]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Watermark]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1998</guid>
		<description><![CDATA[以前用 WordPress 帮朋友搭建了一个展示公司产品的网站, 发现产品图片时常被同行盗用. 于是捣鼓着搞个为图片加水印的功能, 找来一款 WordPress 图片水印插件: Watermark Reloaded, 并且对插件做了一些修改, 让它支持半透明水印. 插件功能 看看 WordPress 后台截了个图, 功能一目了然. 支持对指定类型的图片进行加水印操作 支持水印定位和位置微调 支持自定义水印文本, 修改文字类型, 文字尺寸和文字颜色 设置完成后, 当用户使用 WordPress 的添加附件功能上传图片, 即在指定格式的图片上进行水印处理. 也就是说, 这个插件在上传图片后, 在传送到指定目录之前为图片加上水印. 半透明水印 在多款 WordPress 图片水印插件中, Watermark Reloaded 并不算功能强大, 但是它使用起来十分便利. 除了半透明水印效果, 它可以满足我其他最想要的功能, 所以我决定改造一下, 让它水印支持透明度调整. 很简单的, 跟我来试一下... 打开插件的主文件 watermark-reloaded.php, 并找到 imageAddText 方法. 将该方法修改如下: private function imageAddText&#40;$image, array $opt&#41; [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
以前用 WordPress 帮朋友搭建了一个展示公司产品的网站, 发现产品图片时常被同行盗用. 于是捣鼓着搞个为图片加水印的功能, 找来一款 <strong>WordPress 图片水印插件</strong>: <a href="http://wordpress.org/extend/plugins/watermark-reloaded/" rel="external">Watermark Reloaded</a>, 并且对插件做了一些修改, 让它支持半透明水印.
</p>
<p><span id="more-1998"></span></p>
<p>
<img class="sided" src="http://photo.tuhigh.com/pics/1138/0913/187252t1315902882301_o.jpg" alt="WordPress 图片半透明水印效果" />
</p>
<h3>插件功能</h3>
<p>
看看 WordPress 后台截了个图, 功能一目了然.
</p>
<ul>
<li>支持对指定类型的图片进行加水印操作</li>
<li>支持水印定位和位置微调</li>
<li>支持自定义水印文本, 修改文字类型, 文字尺寸和文字颜色</li>
</ul>
<p>
<img class="sided" src="http://s.wordpress.org/extend/plugins/watermark-reloaded/screenshot-1.png" alt="WordPress 图片水印插件 - Watermark Reloaded" width="600" />
</p>
<p>
设置完成后, 当用户使用 WordPress 的添加附件功能上传图片, 即在指定格式的图片上进行水印处理. 也就是说, 这个插件在上传图片后, 在传送到指定目录之前为图片加上水印.
</p>
<h3>半透明水印</h3>
<p>
在多款 WordPress 图片水印插件中, Watermark Reloaded 并不算功能强大, 但是它使用起来十分便利. 除了半透明水印效果, 它可以满足我其他最想要的功能, 所以我决定改造一下, 让它水印支持透明度调整. 很简单的, 跟我来试一下...
</p>
<p>
打开插件的主文件 watermark-reloaded.php, 并找到 imageAddText 方法. 将该方法修改如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> imageAddText<span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// calculate watermark position and get full path to font file</span>
	<span style="color: #000088;">$offset</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">calculateOffset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$opt</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFontFullpath</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$opt</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// allocate text color</span>
	<span style="color: #000088;">$color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'watermark_text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'color'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 这是不透明度, 介于 0.0 和 1.0 之间, 可以参考 CSS3 关于 opacity 的说明.</span>
	<span style="color: #000088;">$opacity</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.65</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Add the text to image</span>
	<span style="color: #000088;">$red</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$green</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$blue</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$alpha</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$opacity</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">127</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$style</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecolorallocatealpha</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <span style="color: #000088;">$red</span><span style="color: #339933;">,</span> <span style="color: #000088;">$green</span><span style="color: #339933;">,</span> <span style="color: #000088;">$blue</span><span style="color: #339933;">,</span> <span style="color: #000088;">$alpha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">imagettftext</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'watermark_text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'size'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$offset</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'x'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$offset</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'y'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$style</span><span style="color: #339933;">,</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'watermark_text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'font'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'watermark_text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$image</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>
如果你实在懒得不想动手, 或者就是搞不来... 没关系, 我基于 Watermark Reloaded 1.2.4 修改了一份. 可以通过下方链接下载.<br />
<a href="http://www.neoease.com/tutorials/watermark-reloaded/watermark-reloaded_1.2.4_with_opacity_option.zip">Watermark Reloaded 1.2.4 半透明水印版</a>
</p>
<p>
<img class="sided" src="http://photo.tuhigh.com/pics/1138/0913/187252t1315901747209_o.gif" alt="Watermark Reloaded 支持半透明水印" />
</p>
<p>
注意: 因为图片通道问题, GIF 图片上的半透明水印会显示成红色.
</p>
<h3>插件不足</h3>
<p>
如前面所说, Watermark Reloaded 功能不强大, 不能完全满足我们的需求, 比如: 支持图片 (PNG) 水印, 文字阴影等等. 最要命的是无法根据图片大小进行自适应的水印处理.
</p>
<p>
举个例子吧, 我正在上传一个 600x600 的图片, WordPress 会为我生成 150x150 的缩略图, 但我只能定义一个大小的水印 (因为只能定义一个文字类型, 字号和尺寸). 当我设定文字尺寸为 72px 的时候, 可能 600x600 显示的效果刚刚好, 但是 150x150 的图片还没有水印大, 被水印完全挡住.
</p>
<h3>相关插件</h3>
<p>
我用 Google 找到的第一个 WordPress 图片水印插件是 <a href="http://www.wp-watermark.com/" rel="external">Marekkis Watermark</a>. 从功能介绍看这个插件很强大, 支持布局, 修改字体, 图片水印, 透明度等等. 看似十分完美, 但很遗憾, 我在 WordPress 3.2.1 中激活插件导致页面布局异常, 所以放弃了... 追求某些水印功能的朋友可以一试.
</p>
<h3>后话</h3>
<p>
我的博客没有使用 WordPress 的图库功能, 也不考虑要给图片打水印. 所以关于插件的不足, 写个新给插件作者建议一下好了, 在此打住不折腾. 如果你也像我一样需要图床服务, 可以留意一下<a href="http://www.neoease.com/tuhigh-vip-invite-code/">《发放图海 VIP 邀请码》</a>, 我会不定期发放.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1998" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/lavalamp-for-wordpress-users/" rel="bookmark">在主题中添加 LavaLamp 菜单效果</a><!-- (13.2)--></li>
		<li><a href="http://www.neoease.com/wordpress-menubar-3/" rel="bookmark">WordPress 淡出淡入导航菜单</a><!-- (11)--></li>
		<li><a href="http://www.neoease.com/theme-style-switcher-1/" rel="bookmark">在主题上添加风格切换功能 (1)</a><!-- (8.8)--></li>
		<li><a href="http://www.neoease.com/wordpress-searchbox-tip/" rel="bookmark">WordPress 搜索框添加文字提示</a><!-- (8.2)--></li>
		<li><a href="http://www.neoease.com/use-image-title-in-inove/" rel="bookmark">Use Image Title in iNove</a><!-- (7.9)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-plugin-watermark-reloaded/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>手机版 WordPress 界面插件 - WPtouch</title>
		<link>http://www.neoease.com/wordpress-mobile-ui-plugin-wptouch/</link>
		<comments>http://www.neoease.com/wordpress-mobile-ui-plugin-wptouch/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 16:54:33 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1967</guid>
		<description><![CDATA[最近对触摸设备的浏览器做了功能兼容, 但在小尺寸的移动设备上效果还是不尽人意, 所以看了别人怎么做, 找来了一个叫 WPtouch 的 WordPress 插件制作手机浏览器版本. 随着智能手机和移动网络的广泛应用, 手机浏览器成了最常用的网页载体之一. 但因为受手机屏幕小所限, 很多网站对手机浏览进行了特殊处理, 让访客方便阅读... 使用动机 可能你也曾想过做一套针对手机用户的界面, 或是进行网页兼容 (比如: 不显示侧边栏). 无论是再做一套还是进行兼容, 工作量都不少. 然而, 如果你使用 WordPress, 一切并没有那么艰难, 你可以使用 WPtouch, 它为我们提供整套的浏览器兼容方案. 该插件简单易用, 安装激活即可. 功能特点 WPtouch 支持 iPod, iPhone, iPad, Android, 黑莓, Palm OS 等常用的触摸设备浏览器. 而且强大如一个网站管理工具, 免费版就可以进行一些常规的页面修改, 如选择是否显示文章 Tags, 分类, 作者信息, view more 链接, 菜单管理, 搜索, 分享按钮等常规的功能. WPtouch Pro 版貌似很犀利, [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
最近对触摸设备的浏览器做了功能兼容, 但在小尺寸的移动设备上效果还是不尽人意, 所以看了别人怎么做, 找来了一个叫 <strong><a rel="external" href="http://wordpress.org/extend/plugins/wptouch/">WPtouch</a></strong> 的 <strong><a href="http://www.neoease.com/plugins/">WordPress 插件</a></strong>制作手机浏览器版本.
</p>
<p>
随着智能手机和移动网络的广泛应用, 手机浏览器成了最常用的网页载体之一. 但因为受手机屏幕小所限, 很多网站对手机浏览进行了特殊处理, 让访客方便阅读...
</p>
<p><span id="more-1967"></span></p>
<h3>使用动机</h3>
<p>
可能你也曾想过做一套针对手机用户的界面, 或是进行网页兼容 (比如: 不显示侧边栏). 无论是再做一套还是进行兼容, 工作量都不少. 然而, 如果你使用 WordPress, 一切并没有那么艰难, 你可以使用 WPtouch, 它为我们提供整套的浏览器兼容方案. 该插件简单易用, 安装激活即可.
</p>
<h3>功能特点</h3>
<p>
WPtouch 支持 iPod, iPhone, iPad, Android, 黑莓, Palm OS 等常用的触摸设备浏览器. 而且强大如一个网站管理工具, 免费版就可以进行一些常规的页面修改, 如选择是否显示文章 Tags, 分类, 作者信息, view more 链接, 菜单管理, 搜索, 分享按钮等常规的功能. <a rel="external" href="http://www.bravenewcode.com/store/plugins/wptouch-pro/">WPtouch Pro</a> 版貌似很犀利, 可以自定义主题, 管理广告, 还支持平板电脑界面.
</p>
<h3>显示效果</h3>
<p>
如果有 iPhone 或者 Android 手机, 可以访问我的博客看看效果.
</p>
<p>
<img class="sided" src="http://photo.tuhigh.com/pics/1136/0830/187252t1314636123633_o.png" alt="WPtouch 插件生成页面在手机浏览器上的显示效果" />
</p>
<p>
免费版已经很强大, 没有必要使用付费版本. 如果要定义主题, 可以修改 default 主题达到效果. 插件提供的那些强大的自定义功能对个人博客来说没什么用, 而且平板设备屏幕大, 进行网页兼容即可兼容, 没有必要另起一套.
</p>
<h3>后话</h3>
<p>
插件提供默认主题功能很强大, 连 AJAX 加载文章的功能都有, 但页面结构并不好, 建议有时间爱折腾的同学自我修改和优化.
</p>
<p>
本来我是想自己多做一套针对手机设备的 WordPress 主题, 在 PHP 层判断浏览来源, 如果是手机设备则使用这套主题. 后来<a rel="nofollow external" href="http://wangyueblog.com/">望月</a>告诉我有这个叫 WPtouch 的插件, 就把玩了起来. 我不知道以后会不会一直用着, 但会研究一下这个插件, 这么强大一个插件有很多可以借鉴的内容.
</p>
<p>
<strong>2011年10月6日更新:</strong> 现在我已经开发了一个名叫 <a href="http://www.neoease.com/wp-mobile-themes/">WordPress Mobile Themes</a> 的插件, 可以为使用手机浏览的访客选择另一套主题, 作为手机主题. 也为该博客设计了一套手机主题, 用手机浏览器访问即可看到...</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1967" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/mobile-aps-for-job5156/" rel="bookmark">智通人才网手机客户端</a><!-- (9.6)--></li>
		<li><a href="http://www.neoease.com/wp-mobile-themes/" rel="bookmark">手机主题调度插件 WordPress Mobile Themes</a><!-- (8.3)--></li>
		<li><a href="http://www.neoease.com/add-web-icon-to-home-screen-on-iphone-or-ipad/" rel="bookmark">为 iPhone 和 iPad 自定义网站的主屏幕图标</a><!-- (5.7)--></li>
		<li><a href="http://www.neoease.com/meizu-m8-theme-iphone-style-suave/" rel="bookmark">魅族 M8 的 iPhone 风格主题 Suave</a><!-- (5.4)--></li>
		<li><a href="http://www.neoease.com/app-daily-push/" rel="bookmark">App 每日推送 - 挖掘免费 iPhone/iPad 应用</a><!-- (5.3)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-mobile-ui-plugin-wptouch/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>WordPress 的 JavaScript 本地化</title>
		<link>http://www.neoease.com/wordpress-javascript-l10n/</link>
		<comments>http://www.neoease.com/wordpress-javascript-l10n/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 13:27:13 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Feature]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[l10n]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1844</guid>
		<description><![CDATA[WordPress 升级到 3.1 之后, 如果主题支持 wp_head() 方法, 将在页面加载一个名为 l10n.js 的文件, 这是为 JavaScript 本地化提供的工具库. 目前对大多数人来说是一个无用的功能, 甚至有人认为这是 WordPress 卑鄙地偷偷地在页面上埋了一个扯淡的脚本, 所以网上能找到的都是如何卸载脚本的方法. 在我们卸载之前, 是不是应该先了解一下这是怎样的一个功能, 添加脚本的意图是什么? 本文将说明 l10n.js 脚本存在的意义, 本地化脚本的使用方法和对其未来的展望. &#60;script type='text/javascript' src='{ROOT DIR}/wp-includes/js/l10n.js?ver=20101110'&#62;&#60;/script&#62; i18n 和 l10n i18n[1] 和 l10n[2] 是 IT 领域常用的缩写术语, 分别是国际化和本地化的意思. i18n 指应用程序能够为不同的国家和语言环境的用户群体提供本地化的服务, 而 l10n 则是在用户使用环境实现本地化特性, 国际化和本地化泛指语言环境的多语言实现. 如: WordPress 是一个支持国际化的程序, 只要提供对应国家语言包并制定国家代号, 就能替换整个网站的语言环境. JavaScript 本地化 如前面的例子, WordPress 一直支持国际化, [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
WordPress 升级到 3.1 之后, 如果主题支持 <code>wp_head()</code> 方法, 将在页面加载一个名为 <strong>l10n.js</strong> 的文件, 这是为 <strong>JavaScript 本地化</strong>提供的工具库. 目前对大多数人来说是一个无用的功能, 甚至有人认为这是 WordPress 卑鄙地偷偷地在页面上埋了一个扯淡的脚本, 所以网上能找到的都是如何卸载脚本的方法. 在我们卸载之前, 是不是应该先了解一下这是怎样的一个功能, 添加脚本的意图是什么? 本文将说明 l10n.js 脚本存在的意义, 本地化脚本的使用方法和对其未来的展望.
</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'text/javascript'</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'{ROOT DIR}/wp-includes/js/l10n.js?ver=20101110'</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p><span id="more-1844"></span></p>
<h3>i18n 和 l10n</h3>
<p>
i18n<sup>[1]</sup> 和 l10n<sup>[2]</sup> 是 IT 领域常用的缩写术语, 分别是国际化和本地化的意思. i18n 指应用程序能够为不同的国家和语言环境的用户群体提供本地化的服务, 而 l10n 则是在用户使用环境实现本地化特性, 国际化和本地化泛指语言环境的多语言实现. 如: WordPress 是一个支持国际化的程序, 只要提供对应国家语言包并制定国家代号, 就能替换整个网站的语言环境.
</p>
<h3>JavaScript 本地化</h3>
<p>
如前面的例子, WordPress 一直支持国际化, 并提供 <code>_e()</code> 和 <code>__()</code> 两个 PHP 方法对程序进行本地化. 但随着前端 JavaScript 应用越来越多, 后端的国际化已经满足不了所有需求, 有必要引入 JavaScript 的国际化和本地化.
</p>
<p>
若你使用的主题支持 <code>wp_head()</code> 方法, 将在页面加载 l10n.js 文件, 而且用户可以通过简单的代码向页面注入本地化资源. l10n.js 是一个 JavaScript 本地化的工具库, 包含 <code>convertEntities()</code> 方法, 可以将 HTML 对象还原成原来的值, 所以它会在所有注入的 JavaScript 脚本和本地化资源之前载入.
</p>
<h3>使用的方法</h3>
<p>
我们可以为每一个要载入的 JavaScript 文件定义本地化资源. 实现代码如下<sup>[3]</sup>:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// 必须先载入一个 Javascript 文件</span>
wp_enqueue_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'some_handle'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/some_javascript.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 组装本地化数据, 使用 __() 制作本地化内容</span>
<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'some_string'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Some string to translate'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// 加载本地化脚本. 这里必须指定一个需要载入的 JavaScript 文件.</span>
wp_localize_script<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'some_handle'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'object_name'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
执行后将在页面上生成代码如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/* &lt;![CDATA[ */</span>
<span style="color: #003366; font-weight: bold;">var</span> object_name <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
some_string<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Some string to translate&quot;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009966; font-style: italic;">/* ]]&gt; */</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">'text/javascript'</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">'{ROOT DIR}/some_javascript.js?ver=3.1'</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>
本地化资源会在指定脚本之前载入和定义. 其中 {ROOT DIR} 是网站的根目录.
</p>
<p>
此时如果我们可以通过以下代码进行测试:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>object_name.<span style="color: #660066;">some_string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 弹出对话框, 显示 'Some string to translate'</span></pre></div></div>

<h3>利弊和应用场合</h3>
<p>
好处前面说了很多, 可以方便地进行前端本地化 (需要后端 PHP 配合). 缺点也很明显, 会在每次页面加载时计算本地化资源, 并且载入大量 JavaScript 代码, 增加系统负担和延长页面加载时间.
</p>
<p>
JavaScript 本地化是 WordPress 主题和插件制作中让人较为烦恼的地方, 一些插件开发者会在页面上自行定义 l10n 对象, 可以参考 <a href="http://www.neoease.com/wp-recentcomments/">WP-RecentComments 插件</a>的做法. WordPress 这次强行引入, 很可能会被主题和插件开发者广泛应用. 也就是说, 不久的将来你未必敢卸载掉它, 否则某些插件将运行不了.
</p>
<h3>卸载和恢复的方法</h3>
<p>
虽说 l10n.js 文件很小, 好歹会发出一个请求, 如果你真的认为没用, 可以在 functions.php 中添加以下代码将它卸载掉.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">wp_deregister_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'l10n'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
如函数名, 这个方法不是禁用, 而是注销. 也就是说, 一旦你注销就没有了, 就算删除这段代码也不会还原. 如果在注销后希望回复需要使用以下方法:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">wp_register_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'l10n'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>总结</h3>
<p>
WordPress 的想法很好, 但这实现方式叫我该如何吐槽, 希望 "支持 JavaScript 本地化" 不是通过主题审核的必要条件. 作为前端, 多少有点页面洁癖, 我已经将这个脚本注销掉了. 另外, 看到 WordPress 3.1 那夺目的 Admin Bar 我淡定地笑了, 祝 WordPress 越来越臃肿.
</p>
<div class="annotations">
<h5>注解</h5>
<ol>
<li>internationalization, 国际化的意思. 因为单词前后字母 i 和 n 之间有 18 个字母存在, 所以缩写成 i18n.</li>
<li>localization, 本地化的意思. 因为单词前后字母 l 和 n 之间有 10 个字母存在, 所以缩写成 l10n.</li>
<li>代码引用自 <a rel="external" href="http://codex.wordpress.org/Function_Reference/wp_localize_script">WordPress Codex - wp_localize_script</a>.</li>
</ol>
</div>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1844" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/javascript-get-integer-via-parseint/" rel="bookmark">JavaScript 的 parseInt 取整</a><!-- (9.2)--></li>
		<li><a href="http://www.neoease.com/javascript-namespace/" rel="bookmark">JavaScript 的命名空间</a><!-- (8.4)--></li>
		<li><a href="http://www.neoease.com/load-posts-dynamically/" rel="bookmark">WordPress 动态加载文章内容</a><!-- (7.9)--></li>
		<li><a href="http://www.neoease.com/javascript-onload-function/" rel="bookmark">JavaScript 初始化装载方法</a><!-- (7.6)--></li>
		<li><a href="http://www.neoease.com/javascript-with-statement/" rel="bookmark">关于 JavaScript 的 with 语句</a><!-- (7)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-javascript-l10n/feed/</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>WordPress AJAX 加载文章内容 - 后台处理</title>
		<link>http://www.neoease.com/ajax-load-wordpress-post-response/</link>
		<comments>http://www.neoease.com/ajax-load-wordpress-post-response/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 17:26:09 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1761</guid>
		<description><![CDATA[关于 WordPress 动态加载文章的原因, 利弊, 思路, 以及前台 JavaScript 的实现, 我已经在以前的文章中很具体地讲解过了. 可以转跳《动态加载文章内容》一文了解相关内容. 因为时间问题, 自己的没有做得很满意, 所以没有说明如何处理后台响应, 出了那么一个不完整的教程. 直到昨天有人来公司面试跟我提起这个, 觉得还是可以说说的. 本文将会对此进行具体的讲解. 处理思路 从前台传到后台的参数有两个, 一个是 action ID, 用于确定使用的接口, 另一个是文章的 ID, 用于获取文章对应的内容. 《动态加载文章内容》一文中我提示过, 可以参考 wp-includes/post-template.php 的 get_the_content 方法, 通过文章 ID 获取文章内容. 下面我们来分析一下这个方法. function get_the_content&#40;$more_link_text = null, $stripteaser = 0&#41; &#123; global $id, $post, $more, $page, $pages, $multipage, $preview; &#160; // 设定 [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
关于 WordPress 动态加载文章的原因, 利弊, 思路, 以及前台 JavaScript 的实现, 我已经在以前的文章中很具体地讲解过了. 可以转跳<a href="http://www.neoease.com/load-posts-dynamically/">《动态加载文章内容》</a>一文了解相关内容.
</p>
<p>
因为时间问题, 自己的没有做得很满意, 所以没有说明如何处理后台响应, 出了那么一个不完整的教程. 直到昨天有人来公司<a rel="nofollow" href="http://www.neoease.com/alibaba-ued-2010-hiring/">面试</a>跟我提起这个, 觉得还是可以说说的. 本文将会对此进行具体的讲解.
</p>
<p><span id="more-1761"></span></p>
<h3>处理思路</h3>
<p>
从前台传到后台的参数有两个, 一个是 action ID, 用于确定使用的接口, 另一个是文章的 ID, 用于获取文章对应的内容.
</p>
<p>
《动态加载文章内容》一文中我提示过, 可以参考 wp-includes/post-template.php 的 get_the_content 方法, 通过文章 ID 获取文章内容. 下面我们来分析一下这个方法.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> get_the_content<span style="color: #009900;">&#40;</span><span style="color: #000088;">$more_link_text</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$stripteaser</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$post</span><span style="color: #339933;">,</span> <span style="color: #000088;">$more</span><span style="color: #339933;">,</span> <span style="color: #000088;">$page</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pages</span><span style="color: #339933;">,</span> <span style="color: #000088;">$multipage</span><span style="color: #339933;">,</span> <span style="color: #000088;">$preview</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 设定 &quot;查看全文&quot; 的链接文案</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">===</span> <span style="color: #000088;">$more_link_text</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$more_link_text</span> <span style="color: #339933;">=</span> __<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'(more...)'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 返回内容</span>
	<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// More 标签是否存在的标记位</span>
	<span style="color: #000088;">$hasTeaser</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果文章要求输入密码, 并且在 Cookie 中找不到处理过的信息, 则返回要求输入密码的查看表单</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> post_password_required<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> get_the_password_form<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 请求的文章片段对应的页面大于最大页数 (即文章片段不存在), 则返回最大页码的文章片段</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$page</span> <span style="color: #339933;">&gt;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pages</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pages</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 文章内容是最后分页中的文章片段</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pages</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$page</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// 如果文中有 More 标签, 要求切断文章并输出 &quot;查看全文&quot; 链接, 则重定义文章内容, 标记 More 标签存在</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;!--more(.*?)?--&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #339933;">,</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$more_link_text</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
			<span style="color: #000088;">$more_link_text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span>wp_kses_no_null<span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$hasTeaser</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果进行了文章切断处理, 且不存在分页要求, </span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_content</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&lt;!-- noteaser --&gt;'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$multipage</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$stripteaser</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 获取文章内容的第一部分; 如果在独立文章存在 Read more 和切断处理, 则文章内容为空</span>
	<span style="color: #000088;">$teaser</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$more</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$stripteaser</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$hasTeaser</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #000088;">$teaser</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$output</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$teaser</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 如果文章分为多个片段, 在独立文章中拼接上第二部分, 摘要内容中显示 &quot;阅读全文&quot; 链接</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$more</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$output</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;span id=&quot;more-'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$id</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;&lt;/span&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$more_link_text</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
				<span style="color: #000088;">$output</span> <span style="color: #339933;">.=</span> apply_filters<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'the_content_more_link'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">' &lt;a href=&quot;'</span> <span style="color: #339933;">.</span> get_permalink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;#more-<span style="color: #006699; font-weight: bold;">$id</span><span style="color: #000099; font-weight: bold;">\&quot;</span> class=<span style="color: #000099; font-weight: bold;">\&quot;</span>more-link<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;<span style="color: #006699; font-weight: bold;">$more_link_text</span>&lt;/a&gt;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$more_link_text</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> force_balance_tags<span style="color: #009900;">&#40;</span><span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$preview</span> <span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// preview fix for javascript bug with foreign languages</span>
		<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span>	<span style="color: #990000;">preg_replace_callback</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\%u([0-9A-F]{4})/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">create_function</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'$match'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'return &quot;&amp;#&quot; . base_convert($match[1], 16, 10) . &quot;;&quot;;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// 返回文章内容</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$preview</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>
你完全可以这样想: 只要满足一些传入的参数, 去除一些不必要的, 更换一些可取代的, 将页面返回改成输出, 就是一个输出文章内容的接口.
</p>
<h3>处理方法</h3>
<p>
如果我们暂时不考虑输入密码, 分页等功能; 另外, 因为 More 和切断功能不应该在展开文章内容中存在, 响应处理可以变得很简单. 我们要做的事就这么几个:<br />
1. 做出 action 对应的接口<br />
2. 获取指定文章的内容<br />
3. 格式化文章内容<br />
4. 返回文章内容
</p>
<p>
多说无用, 直接上代码, 加注释:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> load_post<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// 如果 action ID 是 load_post, 并且传入的必须参数存在, 则执行响应方法</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'load_post'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 获取文章对象</span>
		<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">,</span> <span style="color: #000088;">$post</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$post</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_row</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT * FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span> WHERE ID = <span style="color: #009933; font-weight: bold;">%d</span> LIMIT 1&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 如果指定 ID 的文章存在, 则对他进行格式化</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_content</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> balanceTags<span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> wpautop<span style="color: #009900;">&#40;</span><span style="color: #000088;">$output</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// 打印文章内容并中断后面的处理</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">// 将接口加到 init 中</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'init'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'load_post'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
看完这段代码, 是不是感到相当的简单明了? 因为这是最基本的操作, 很多功能并没考虑在内. Okay, 这样就引出多个问题:<br />
1. 如果存在某个插件, 会对文章内容进行特殊处理 (如: WP-Polls), 响应处理需要特殊处理吗? 如何操作?<br />
2. 如果有加密文章, 如何向用户呈现? 前后台又该如何配合?<br />
3. 如果存在文章分页, 当用户点击翻页链接时会发生什么事情? 怎样处理体验更好?
</p>
<p>
这些问题作为后面的话题我会逐一讲解并解决掉, 但再此之前, 你是否已经想到解决办法了?</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1761" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/load-posts-dynamically/" rel="bookmark">WordPress 动态加载文章内容</a><!-- (10.6)--></li>
		<li><a href="http://www.neoease.com/ajax-comment-pager/" rel="bookmark">评论分页插件 AJAX Comment Pager</a><!-- (9)--></li>
		<li><a href="http://www.neoease.com/add-nofollow-to-read-more-link-on-wordpress/" rel="bookmark">为 WordPress 的 Read more 加上 nofollow</a><!-- (8.5)--></li>
		<li><a href="http://www.neoease.com/quick-comments/" rel="bookmark">AJAX 评论提交插件 Quick Comments</a><!-- (8.3)--></li>
		<li><a href="http://www.neoease.com/wordpress-seo-tips/" rel="bookmark">WordPress SEO 技巧</a><!-- (8.3)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/ajax-load-wordpress-post-response/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>WordPress 上的 Feedsky 统计插件</title>
		<link>http://www.neoease.com/feedsky-statistic/</link>
		<comments>http://www.neoease.com/feedsky-statistic/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 12:43:33 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Feedsky]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Subscribe]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1695</guid>
		<description><![CDATA[Feedsky 是国内著名的订阅托管服务, 但官方只提供图片和 Flash 两种途径获取订阅统计信息的, 而我们设计网站风格时往往期望可以更加灵活地获取信息, 如文本方式. 为此, 本插件应运而生, 名为 Feedsky Statistic. 它可以在每天的特定时间自动将 Feedsky 的前一天的统计数据 (订阅人数和点击次数) 同步到 WordPress 中. 之前我写过一个说明 Feedsky 统计同步原理的文章, 并提供了核心代码. 愿意折腾的同学请参考文章《每日同步 Feedsky 订阅数》, 不愿意折腾的同学可以购买插件使用. 该插件仅售 &#165; 2.98 人民币. 立即购买 插件的安装 Feedsky 统计插件的安装和使用非常简单, 只需要按一下几个步骤操作即可. 1. 将插件解压到 '/wp-content/plugins/' 目录. 2. 在 WordPress 后台的 'Plugins' 页面中激活插件. 3. 在主题代码中调用统计信息. 如下： 显示 Feedsky 的订阅数量: &#60;?php if&#40;function_exists&#40;'get_feedsky_count'&#41;&#41; &#123;echo [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<div class="inline right">
<img class="sided" src="http://wpjam.net/wp-content/uploads/2010/12/feedsky-statistic.png" alt="Feedsky 统计插件" />
</div>
<p>
Feedsky 是国内著名的订阅托管服务, 但官方只提供图片和 Flash 两种途径获取订阅统计信息的, 而我们设计网站风格时往往期望可以更加灵活地获取信息, 如文本方式.
</p>
<p>
为此, 本插件应运而生, 名为 <strong>Feedsky Statistic</strong>. 它可以在每天的特定时间自动将 Feedsky 的前一天的统计数据 (订阅人数和点击次数) 同步到 WordPress 中.
</p>
<p>
之前我写过一个说明 Feedsky 统计同步原理的文章, 并提供了核心代码. 愿意折腾的同学请参考文章<a href="http://www.neoease.com/update-feedsky-subscribe-number-everyday/">《每日同步 Feedsky 订阅数》</a>, 不愿意折腾的同学可以购买插件使用.
</p>
<p>
该插件仅售 <span class="cost">&yen; <b>2.98</b></span> 人民币.<br />
<a class="buy-now-cn" rel="external nofollow" href="http://wpjam.net/item/feedsky-statistic/?ref=mg12">立即购买</a>
</p>
<p><span id="more-1695"></span></p>
<h3>插件的安装</h3>
<p>
Feedsky 统计插件的安装和使用非常简单, 只需要按一下几个步骤操作即可.
</p>
<p>
1. 将插件解压到 '/wp-content/plugins/' 目录.<br />
2. 在 WordPress 后台的 'Plugins' 页面中激活插件.<br />
3. 在主题代码中调用统计信息. 如下：
</p>
<p>
显示 Feedsky 的订阅数量:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'get_feedsky_count'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> get_feedsky_count<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
显示 Feedsky 的点击次数:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'get_feedsky_comein'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #b1b100;">echo</span> get_feedsky_comein<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>插件的设置</h3>
<p>
填入 Feed ID 和定期更新的时间, 并保存更改.
</p>
<p>
<img class="sided" src="http://wpjam.net/wp-content/uploads/screenshot/feedsky-statistic.png" alt="Feedsky 统计配置" />
</p>
<h3>插件本地化</h3>
<p>
此版本支持英文和简体中文, 其中英文是默认设置. 若要使用简体中文, 请执行以下步骤:
</p>
<p>
1. 打开 WordPress 根目录的文件 wp-config.php.<br />
2. 查找 define ('WPLANG', ''); 并修改为 define ('WPLANG', 'zh_CN');.
</p>
<h3>备注</h3>
<p>
使用该插件时, 请确保你的 PHP 服务器允许读写网络文件. 可以通过以下方式打开服务.<br />
1. 打开 PHP 配置文件 php.ini.<br />
2. 找到 allow_url_include 并将它的值改为 On.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1695" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wp-mobile-themes/" rel="bookmark">手机主题调度插件 WordPress Mobile Themes</a><!-- (17.9)--></li>
		<li><a href="http://www.neoease.com/wp-easyarchives/" rel="bookmark">文章存档插件 WP-EasyArchives</a><!-- (15.8)--></li>
		<li><a href="http://www.neoease.com/wp-recentcomments/" rel="bookmark">最新评论插件 WP-RecentComments</a><!-- (14.9)--></li>
		<li><a href="http://www.neoease.com/highslide4wp/" rel="bookmark">图片预览插件 Highslide4WP</a><!-- (14.3)--></li>
		<li><a href="http://www.neoease.com/wp-multicollinks/" rel="bookmark">多栏友情链接插件 WP-MulticolLinks</a><!-- (12.3)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/feedsky-statistic/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>WordPress Cron 定时任务</title>
		<link>http://www.neoease.com/wordpress-cron/</link>
		<comments>http://www.neoease.com/wordpress-cron/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 05:44:01 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Schedule]]></category>
		<category><![CDATA[Task]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1672</guid>
		<description><![CDATA[最近我使用 WordPress Cron 定时任务相关功能实现每日一更新的博客订阅数量更新. WP Cron 是什么? 是 WordPress 一套定时触发机制, 可以循环安排任务执行. 如: 定时发布新文章, 定期检测版本等功能都是通过这个来实现的. WP Cron 可以为我们实现什么? 我们可以循环更新和提交网站数据, 节日定期向读者发送贺卡或者表单, ... WordPress 定时任务方法列表可以参考: WP-Cron Functions WP-Cron 效率不高, 但还是很方便好用的, 整理了一下相关函数的使用方法如下. wp_get_schedule 通过勾子别名, 获取预定安排的勾子. 成功时返回循环周期类别 (hourly, twicedaily, daily, ...), 失败时返回 false. &#60;?php wp_get_schedule&#40; $hook, $args &#41; ?&#62; $hook: 勾子别名 $args: 勾子对应函数的参数数组 (可选) wp_get_schedules WordPress 默认支持的循环周期类别有 hourly, twicedaily 和 [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
最近我使用 <strong>WordPress Cron 定时任务</strong>相关功能实现每日一更新的博客订阅数量更新.
</p>
<p>
WP Cron 是什么? 是 WordPress 一套定时触发机制, 可以循环安排任务执行. 如: 定时发布新文章, 定期检测版本等功能都是通过这个来实现的.
</p>
<p>
WP Cron 可以为我们实现什么? 我们可以循环更新和提交网站数据, 节日定期向读者发送贺卡或者表单, ...
</p>
<p><span id="more-1672"></span></p>
<p>
WordPress 定时任务方法列表可以参考: <a rel="external nofollow" href="http://codex.wordpress.org/Category:WP-Cron_Functions">WP-Cron Functions</a><br />
WP-Cron 效率不高, 但还是很方便好用的, 整理了一下相关函数的使用方法如下.
</p>
<h3>wp_get_schedule</h3>
<p>
通过勾子别名, 获取预定安排的勾子. 成功时返回循环周期类别 (hourly, twicedaily, daily, ...), 失败时返回 false.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_get_schedule<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hook</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$hook: 勾子别名<br />
$args: 勾子对应函数的参数数组 (可选)
</p>
<h3>wp_get_schedules</h3>
<p>
WordPress 默认支持的循环周期类别有 hourly, twicedaily 和 daily. 通过该函数我们可以获取所有这些循环周期数组.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_get_schedules<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
在默认情况下, 由以上方法获得的数组对象如下.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'hourly'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'interval'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3600</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'display'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Once Hourly'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'twicedaily'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'interval'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">43200</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'display'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Twice Daily'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'daily'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'interval'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">86400</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'display'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Once Daily'</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span></pre></div></div>

<p>
我们可以向 cron_schedules 过滤器添加更多的类型. 添加例子如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cron_schedules'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cron_add_weekly'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">function</span> cron_add_weekly<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$schedules</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Adds once weekly to the existing schedules.</span>
	<span style="color: #000088;">$schedules</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'weekly'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'interval'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">604800</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// 1周 = 60秒 * 60分钟 * 24小时 * 7天</span>
		<span style="color: #0000ff;">'display'</span> <span style="color: #339933;">=&gt;</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Once Weekly'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$schedules</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>wp_next_scheduled</h3>
<p>
通过勾子别名, 获取预定安排的下一个运行时刻, 以整型返回. 常用于判断是否已经做了预定安排.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$timestamp</span> <span style="color: #339933;">=</span> wp_next_scheduled<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hook</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$hook: 勾子别名<br />
$args: 勾子对应函数的参数数组 (可选)
</p>
<h3>wp_schedule_event</h3>
<p>
按周期循环预定安排一个 WordPress 勾子, 在预定时间触发勾子对应的函数.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_schedule_event<span style="color: #009900;">&#40;</span><span style="color: #000088;">$timestamp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recurrence</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hook</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$timestamp: 时间 (整型)<br />
$recurrence: 循环周期类别 (hourly, twicedaily, daily, ...)<br />
$hook: 勾子别名<br />
$args: 勾子对应函数的参数数组 (可选)
</p>
<h3>wp_reschedule_event</h3>
<p>
按周期循环重新预定安排一个 WordPress 勾子. 但我发现这个方法不能正常使用, Codex 写得很草, 如果哪位清楚知道怎么使用, 请告知一下.
</p>
<h3>wp_unschedule_event</h3>
<p>
通过预定时间和勾子别名, 取消预定的安排.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_unschedule_event<span style="color: #009900;">&#40;</span><span style="color: #000088;">$timestamp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hook</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$timestamp: 时间 (整型)<br />
$hook: 勾子别名<br />
$args: 勾子对应函数的参数数组 (可选)
</p>
<h3>wp_clear_scheduled_hook</h3>
<p>
通过勾子别名, 移除预定安排的勾子.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_clear_scheduled_hook<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hook</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$hook: 勾子别名
</p>
<h3>wp_schedule_single_event</h3>
<p>
预定安排一个 WordPress 勾子, 在预定时间触发勾子对应的函数. 与 wp_schedule_event 不同的是该方法的只安排一次触发, 不存在循环预定.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_schedule_single_event<span style="color: #009900;">&#40;</span><span style="color: #000088;">$timestamp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hook</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
$timestamp: 时间 (整型)<br />
$args: 勾子对应函数的参数数组 (可选)
</p>
<h3>查看 WordPress 定时任务列表</h3>
<p>
因为是定时任务, 不能立即生效, 那我们要如何查看这些任务安排呢? 可以装个插件进行辅助. 我建议使用比较轻量级的 <a rel="nofollow external" href="http://wordpress.org/extend/plugins/wp-cron-dashboard/">WP-Cron Dashboard</a> (与 <a rel="nofollow" href="http://www.neoease.com/quick-comments/">Quick Comments</a> 同一个作者), 安装后可以在 Tool -&gt; WP-Cron 打开控制面板.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1672" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/how-to-create-wordpress-navi-menu/" rel="bookmark">WordPress 3.0 导航菜单 (开发篇)</a><!-- (7.7)--></li>
		<li><a href="http://www.neoease.com/wordpress-menubar-2/" rel="bookmark">WordPress 二级导航菜单</a><!-- (6.1)--></li>
		<li><a href="http://www.neoease.com/wordpress-walker-comments/" rel="bookmark">WordPress 嵌套回复构成原理</a><!-- (5.9)--></li>
		<li><a href="http://www.neoease.com/wordpress-27-trackbacks-handles/" rel="bookmark">WordPress 2.7 Trackbacks 的两种处理方法</a><!-- (5.5)--></li>
		<li><a href="http://www.neoease.com/how-to-use-wordpress-navi-menu/" rel="bookmark">WordPress 3.0 导航菜单 (使用篇)</a><!-- (5.2)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-cron/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>WordPress 主题审核</title>
		<link>http://www.neoease.com/wordpress-theme-review/</link>
		<comments>http://www.neoease.com/wordpress-theme-review/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 09:00:05 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Theme]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1557</guid>
		<description><![CDATA[最近我企图升级一下那几个 WordPress 主题, 但遇到很大的阻力, 阻力来自 WP 新的主题审核机制. 我恨 WordPress 的主题审核, 并打算不再向官方提交主题更新了 (可能找台服务器放自己的主题更新). 但我可以分享一下自己对这些审核条目的看法以及操作时需要注意的事项, 写这个文章目的有两个: 1. 让准备向官方提交主题的同学知道如何通过主题审核. 2. 回顾一下 WordPress 无理的审核事项, 说说我对其心灰的原因. 让我们一起来看看现在 WordPress 的主题审核 Review 文档吧. 看完你就知道审核团队对你的主题有些什么要求, 从而需要做些什么来让你的主题通过审核. 请打开 Theme Review of WordPress. 我说过一句话: 可有可无的说明可以没有, 所以不重要的我们统统跳过, 只挑那些通过审核的必要条件来讲. 代码质量 PHP 关闭所有插件, 并将 wp-config.php 中的 WP_DEBUG 设为 true 如下: define&#40;WP_DEBUG, true&#41;; 不允许出现任何提示, 警告, 错误和弃用的方法. 我很久之前就说过 WordPress 的方法命名和调用规则不一致, [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
最近我企图升级一下那几个 WordPress 主题, 但遇到很大的阻力, 阻力来自 WP 新的主题审核机制.
</p>
<p>
我恨 WordPress 的主题审核, 并打算不再向官方提交主题更新了 (可能找台服务器放自己的主题更新). 但我可以分享一下自己对这些审核条目的看法以及操作时需要注意的事项, 写这个文章目的有两个:<br />
1. 让准备向官方提交主题的同学知道如何通过主题审核.<br />
2. 回顾一下 WordPress 无理的审核事项, 说说我对其心灰的原因.
</p>
<p><span id="more-1557"></span></p>
<p>
让我们一起来看看现在 WordPress 的主题审核 Review 文档吧. 看完你就知道审核团队对你的主题有些什么要求, 从而需要做些什么来让你的主题通过审核. 请打开 <a rel="external" href="http://codex.wordpress.org/Theme_Review">Theme Review of WordPress</a>. 我说过一句话: 可有可无的说明可以没有, 所以不重要的我们统统跳过, 只挑那些通过审核的必要条件来讲.
</p>
<h3>代码质量</h3>
<p>
<strong>PHP</strong><br />
关闭所有插件, 并将 wp-config.php 中的 WP_DEBUG 设为 true 如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span>WP_DEBUG<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
不允许出现任何提示, 警告, 错误和弃用的方法. 我很久之前就说过 WordPress 的方法命名和调用规则不一致, 看来现在打算整治了. 但我有同时担心某天会有大批插件突然无法使用.
</p>
<p>
<strong>HTML 和 CSS</strong><br />
主题需要通过 (X)HTML 和 CSS 的 W3C 认证. 话说我的主题一直都能过 W3C, 甚至我的博客全部页面都能通过, 这个真不难.
</p>
<p>
<strong>JavaScript</strong><br />
页面上没有任何 JavaScript 脚本错误.
</p>
<h3>功能支持</h3>
<p>
<strong>Feed 链接</strong><br />
使用 add_theme_support('automatic-feed-links') 为浏览器增加网站的订阅链接. 这是个蛋疼的功能, 因为帮你都封装好了, 输出就是原生的 RSS. 本应该人为选择的 (如我主题中的 Feed 自定义功能), 要求这个功能很恶心, 但必须添加. 真想不使用, 又要通过审核? 嗯, 还是有办法的, 你可以通过以下语句添加功能并使它失效.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'automatic-feed-links'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wp_head'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'feed_links_extra'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
<strong>Widgets</strong><br />
提供 Widgets 支持, 这个常谈, 不多言了.
</p>
<p>
<strong>评论</strong><br />
要求使用评论模板 comments_template() 调用 comment.php 的内容.<br />
使用评论列表 wp_list_comments(), 该方法可以通过定义 callback 来自定义评论样式.<br />
需要使用 comment_form() 来定义回复框的结构, 这个很扯淡, 任何美好的设计在它面前都会失色.<br />
还要求支持嵌套回复. 相当扯淡, 本来 WordPress 的嵌套回复设计就不是很好, 现在变成强行要求了.
</p>
<h3>模板标签及勾子</h3>
<p>
wp_head() 和 wp_footer() 分别在 head 和 footer 调用勾子, 对插件来说是必须的, 所以得有.
</p>
<p>
body_class() 和 post_class() 分别在 body 和文章的节点上, 用来输出一大串乱七八糟的 class. 评价: 扯淡的要求.
</p>
<p>
$content_width 用于向用户提供调整主题宽度的功能, 例子如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$content_width</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$content_width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">640</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
用 wp_link_pages() 为文章添加分页导航.
</p>
<p>
用 paginate_comments_links() 或者 previous_comments_link()/next_comments_link() <a href="http://www.neoease.com/wordpress-27-comment-pages/">添加评论分页</a>.
</p>
<p>
用 posts_nav_link() 或者 previous_posts_link()/next_posts_link() 在文章内容显示上一篇和下一篇文章的链接. 我认为在文章内页显示前后的文章是不合理的, 因为文章间没有必然联系, 放置相关文章才靠谱.
</p>
<p>
get_header(), get_sidebar(), get_footer() 和 comments_template() 这几个模板标签必须使用, 分别用来调用 header.php, sidebar.php, footer.php 和 comment.php 这几个文件.
</p>
<h3>WordPress 的 CSS 框架代码</h3>
<p>
用作水平对齐的样式 .aligncenter, .alignleft 和 .alignright. 因为使用 WordPress 的富文本编辑器插入图片时可以选择对齐模式, 这几个样式是必须的.
</p>
<p>
添加图片外框和标题的样式 .wp-caption, .wp-caption-text 和 .gallery-caption. 同样是富文本编辑器的属性要求.
</p>
<p>
CSS 代码会在提交代码的时候由机器审核, 但上传成功后同样会有关于样式效果的人为审核.
</p>
<h3>主题模板</h3>
<p>
以下 4 个模板必须存在:<br />
index.php, 请参考 <a rel="external nofollow" href="http://codex.wordpress.org/Template_Hierarchy">Template Hierarchy of WordPress</a><br />
comments.php, 评论模板<br />
screenshot.png, 缩略图, 需要跟实际效果保持一致.<br />
style.css, 主题相关信息和样式
</p>
<h3>授权</h3>
<p>
主题中用到的 PHP, HTML, CSS, 图片, 字体和图标都必须在 GPL 授权框架下, 或者使用支持 GPL 的授权.
</p>
<p>
主题使用的授权需要通过以下两种方式之一来声明:<br />
1. 在 style.css 文件中添加 License 和 License URI 来制定授权信息.<br />
2. 在主题目录中添加 license.txt 文件为主题添加授权声明.
</p>
<h3>主题命名</h3>
<p>
主题命名里不能出现 WordPress 和 Theme 关键字, 但 WP 可以使用. 如 WordPress AwesomeSauce 和 AwesomeSauce Theme 不能使用, 但 WP AwesomeSauce 可以.
</p>
<p>
主题命名里不能出现有版本相关和审核相关的关键字, 如 Pure CSS3 就不行.
</p>
<p>
主题命名里不能出现作者和针对 SEO/spam 优化过的相关词语, 如 iNove by mg12 和 iNove Free WP Template 这样的名字都是不可以用的.
</p>
<p>
其他的都是可有可无的. 因为审核相当严格, 准备向 WordPress Theme Directory 提交主题的同学请对以上的内容逐条对照, 官方 Review 文档里面还有很多建议, 推荐一看.
</p>
<h3>为什么我不再提交主题审核了?</h3>
<p>
WordPress 为了推广一些可有可无的新特性, 强行要求主题对其进行支持. 让主题的个性化功能失色, 而且完全丧失了对老版本的兼容. 我觉得这些是得不偿失的, 与其为了他接受我的主题, 不如我将自己想做的东西提交到别的网页. 如果跟着这些条目来规约主题内容, 要通过这些审核并不困难, 但我只做我觉得靠谱的主题.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1557" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/inove-13-released/" rel="bookmark">iNove 1.3 发布</a><!-- (10.6)--></li>
		<li><a href="http://www.neoease.com/wordpress-rss-feed/" rel="bookmark">WP 技巧: WordPress 的 RSS feed</a><!-- (9.7)--></li>
		<li><a href="http://www.neoease.com/inove/" rel="bookmark">WordPress 主题 iNove</a><!-- (8.3)--></li>
		<li><a href="http://www.neoease.com/use-image-title-in-inove/" rel="bookmark">Use Image Title in iNove</a><!-- (8)--></li>
		<li><a href="http://www.neoease.com/upload-wordpress-theme/" rel="bookmark">WordPress 主题提交经历</a><!-- (7.9)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-theme-review/feed/</wfw:commentRss>
		<slash:comments>67</slash:comments>
		</item>
		<item>
		<title>解决 WordPress 头像无法显示问题</title>
		<link>http://www.neoease.com/change-gravatar-links-to-fix-wordpress-avatars/</link>
		<comments>http://www.neoease.com/change-gravatar-links-to-fix-wordpress-avatars/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 10:16:56 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Avatar]]></category>
		<category><![CDATA[Gravatar]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1553</guid>
		<description><![CDATA[国内的朋友应该发现最近 WordPress 上的头像总是显示不出来, 而问题只发生在 WP 3.0 或以上版本. WordPress 的头像服务 Gravatar 的部分服务器在国内访问困难, 原因是 Gravatar 所使用的 edgecast CDN 服务遇到了某些问题. WordPress 3.0 通过读取缓存服务器的方式, 减少了对 www.gravatar.com 的直接请求; 以往直接读取官方服务器. 现在都被分流到 0.gravatar.com, 1.gravatar.com 等缓存服务器上了, 这次遇上 CDN 故障, 所以就出现了无法读取头像的问题. WordPress 最新评论插件 WP-RecentComments 直接调用 WordPress 的评论头像接口, 所以也会出现同样的问题. 但只要修复 WordPress 头像显示的问题就能正常如前了. 只需修改 Gavatar 头像的访问方式, 直接请求官方服务器就可以解决问题了. 一些热心网友已经找到问题, 并给出了解决方案. 而现在有更方便的解决办法, 插件. Gravatar Fixed 插件通过函数覆盖的方式, 重新自定义 Gravatar [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
国内的朋友应该发现最近 WordPress 上的头像总是显示不出来, 而问题只发生在 WP 3.0 或以上版本.
</p>
<p>
WordPress 的头像服务 Gravatar 的部分服务器在国内访问困难, 原因是 Gravatar 所使用的 edgecast CDN 服务遇到了某些问题. WordPress 3.0 通过读取缓存服务器的方式, 减少了对 www.gravatar.com 的直接请求; 以往直接读取官方服务器. 现在都被分流到 0.gravatar.com, 1.gravatar.com 等缓存服务器上了, 这次遇上 CDN 故障, 所以就出现了无法读取头像的问题.
</p>
<p><span id="more-1553"></span></p>
<p>
<a href="http://www.neoease.com/plugins/">WordPress 最新评论插件 WP-RecentComments</a> 直接调用 WordPress 的评论头像接口, 所以也会出现同样的问题. 但只要修复 WordPress 头像显示的问题就能正常如前了.
</p>
<p>
只需修改 Gavatar 头像的访问方式, 直接请求官方服务器就可以解决问题了. 一些热心网友已经找到问题, 并给出了解决方案. 而现在有更方便的解决办法, 插件. Gravatar Fixed 插件通过函数覆盖的方式, 重新自定义 Gravatar 服务器, 直接访问 www.gravatar.com 读取头像, 以保证正常访问.
</p>
<p>
<img class="sided" src="http://wpceo.com/wp-content/uploads/2010/10/gravatar-fixed.png" alt="Gravatar插件, 解决 WordPress 头像无法显示的问题" />
</p>
<p>
插件页面: <a rel="external" href="http://wpceo.com/gravatar-fixed/">Gravatar Fixed 头像修正插件</a><br />
下载链接: <a rel="external nofollow" href="http://wpceo.com/wp-content/uploads/2010/10/gravatar-fixed.zip">gravatar-fixed.zip</a></p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1553" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/upload-wordpress-theme/" rel="bookmark">WordPress 主题提交经历</a><!-- (5.5)--></li>
		<li><a href="http://www.neoease.com/upgrade-to-wordpress-26/" rel="bookmark">升级到 WordPress 2.6</a><!-- (4.6)--></li>
		<li><a href="http://www.neoease.com/blocks2/" rel="bookmark">WordPress 主题 Blocks2</a><!-- (4.4)--></li>
		<li><a href="http://www.neoease.com/wordpress-27-comment-pages/" rel="bookmark">主题技巧: WordPress 2.7 的评论分页</a><!-- (4.3)--></li>
		<li><a href="http://www.neoease.com/elegant-box/" rel="bookmark">WordPress 主题 Elegant Box</a><!-- (4.2)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/change-gravatar-links-to-fix-wordpress-avatars/feed/</wfw:commentRss>
		<slash:comments>84</slash:comments>
		</item>
		<item>
		<title>插件更新: WP-RecentComments 2.0</title>
		<link>http://www.neoease.com/wordpress-recent-comments-plugin-2-0/</link>
		<comments>http://www.neoease.com/wordpress-recent-comments-plugin-2-0/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 15:50:28 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Plugin]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1482</guid>
		<description><![CDATA[最近将 WordPress 的最新评论插件 WP-RecentComments 更新了. 这次改动很大, 处理方式和表现形式等都不一样了, 除了用来筛选评论部分几乎都重写了. 我写插件的时候一般分成两个文件写 PHP 代码, 一个是 core.php 用于书写核心代码 (如: 算法, 函数库这些与表现层无关的方法). 另一个文件才是插件代码, 在该文件内引用核心代码加以处理. 得益于这种写法, 这次重写时避开了很多不必要的处理, 如筛选评论, 删除配对标签这些. 如果再细分, 其实还可以将配置页面, 插件 Widget 和页面呈现分别写在三个文件里面, ... 但这些都是后话, 先看看我们这次更新都有哪些内容吧. 新老版本有什么区别? 页面初始化 1.x: 在页面加载时将评论列表输出. 包括事件绑定等. 影响页面其他内容的加载; 爬虫可以爬到这些数据, 对 SEO 不利. 关于评论的 SEO 文章 2.x: 在页面加载完成是生成评论列表并绑定事件. 减少最新评论加载对页面加载时间和搜索引擎的影响. JavaScript 放置 1.x: 在页面 head 部分加载 JS. 因为在页面初始化时通过标签属性绑定了事件, [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<p>
最近将 <a href="http://www.neoease.com/wp-recentcomments/">WordPress 的最新评论插件 WP-RecentComments</a> 更新了. 这次改动很大, 处理方式和表现形式等都不一样了, 除了用来筛选评论部分几乎都重写了.
</p>
<p>
我写插件的时候一般分成两个文件写 PHP 代码, 一个是 core.php 用于书写核心代码 (如: 算法, 函数库这些与表现层无关的方法). 另一个文件才是插件代码, 在该文件内引用核心代码加以处理. 得益于这种写法, 这次重写时避开了很多不必要的处理, 如筛选评论, 删除配对标签这些. 如果再细分, 其实还可以将配置页面, 插件 Widget 和页面呈现分别写在三个文件里面, ... 但这些都是后话, 先看看我们这次更新都有哪些内容吧.
</p>
<p><span id="more-1482"></span></p>
<h3>新老版本有什么区别?</h3>
<p>
<strong>页面初始化</strong><br />
1.x: 在页面加载时将评论列表输出. 包括事件绑定等. 影响页面其他内容的加载; 爬虫可以爬到这些数据, 对 SEO 不利. <a href="http://www.neoease.com/wordpress-comment-seo/">关于评论的 SEO 文章</a><br />
2.x: 在页面加载完成是生成评论列表并绑定事件. 减少最新评论加载对页面加载时间和搜索引擎的影响.
</p>
<p>
<strong>JavaScript 放置</strong><br />
1.x: 在页面 head 部分加载 JS. 因为在页面初始化时通过标签属性绑定了事件, 所以必须在此之前定义好事件.<br />
2.x: 在页面底部加载 JS. 因为最新评论列表也是在页面加载完成时生成, 所以可以这样来后移 JS 的位置, 以减少对页面加载速度的影响.
</p>
<p>
<strong>翻页处理</strong><br />
1.x: 在后台将 HTML 片段拼接好返回页面. 数据量大, 服务器压力大.<br />
2.x: 返回数据格式, 由前台拼接. 数据量小, 服务器压力小.
</p>
<p>
<strong>查看内容</strong><br />
1.x: 进入详细页面查看. 交互复杂, 不能同时看多个评论内容.<br />
2.x: 直接在列表中更新. 简单方便.
</p>
<p>
<strong>插件配置</strong><br />
1.x: 在调用插件的时候进行配置. 保持与 WordPress 原生的 Widget 功能呢个类似, 不需要数据库, 没有学习成本.<br />
2.x: 有专门的配置页面进行配置. 与其他很多插件一样, 需要使用数据库, 有一定的学习使用成本.
</p>
<p>
<strong>代码比较</strong><br />
1.x: 页面结构, 事件绑定混在一起. 工作量小, 处理方便, 但是代码不清晰, 维护麻烦, 扩展性差.<br />
2.x: 页面结构和事件分开处理. 代码量大 (因为前端代码大幅增加), 但代码清晰易懂, 扩展性强.
</p>
<h3>解决了什么问题?</h3>
<p>
1. 延后 JavaScript 加载和事件绑定, 以不影响页面加载和搜索爬虫.<br />
2. 减少服务器处理压力, 转由客户端进行拼装处理.
</p>
<h3>下一步要做什么?</h3>
<p>
1. 会开放一些对外的接口, 让主题和其他插件调用, 用来更新最新评论列表.<br />
2. 增加新的功能, 功能可选择使用.
</p>
<h3>插件 2.0 升级答疑</h3>
<p>
Q: 为什么会一直出现 "正在加载..." 而不显示评论?<br />
A: 请检查主题中的 footer.php 文件是否有代码 <code>&lt;?php wp_footer(); ?&gt;</code>, 如果没有请在 <code>&lt;/body&gt;</code> 标签之前加上. 如果还不行, 请到 Settings -> WP-RecentComments 页面查看 JavaScript 的配置是否正确. 如果你不知道选择哪个, 请选第一或者第二项.
</p>
<p>
Q: 为什么样式没有正确显示?<br />
A: 确保 Settings -> WP-RecentComments 页面中 "使用 wp-recentcomments.css" 被选中. 如果主题目录中存在 wp-recentcomments.css 文件, 请备份并删除掉这个文件. 若删除后样式仍不正确, 请调整一下文件内的样式.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1482" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wp-recentcomments/" rel="bookmark">最新评论插件 WP-RecentComments</a><!-- (12.4)--></li>
		<li><a href="http://www.neoease.com/wordpress-easy-archives-2-0/" rel="bookmark">插件更新: WP-EasyArchives 2.0</a><!-- (11.2)--></li>
		<li><a href="http://www.neoease.com/wp-recentcomments-16-problem/" rel="bookmark">WP-RecentComments 升级 1.6 后可能出现的问题</a><!-- (9.6)--></li>
		<li><a href="http://www.neoease.com/what-do-you-want-for-wp-recentcomments/" rel="bookmark">WP-RecentComments 功能调查</a><!-- (8.5)--></li>
		<li><a href="http://www.neoease.com/unable-to-upload-images-on-wordpress/" rel="bookmark">关于 WordPress 上传图片失效的问题</a><!-- (5)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/wordpress-recent-comments-plugin-2-0/feed/</wfw:commentRss>
		<slash:comments>122</slash:comments>
		</item>
		<item>
		<title>为 WordPress 的评论链接加上 nofollow</title>
		<link>http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/</link>
		<comments>http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 10:25:21 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Comment]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=1443</guid>
		<description><![CDATA[为什么要为 WordPress 的评论链接加上 nofollow? 1. 与 Read more 链接同样, comment 这种词语在网络中泛滥出现. 2. 为了让爬虫明确链接相关内容 (尤其是内链), 应该保证链接在页面中是唯一的. 所以需要 nofollow 掉这些评论链接, 以减少对文章链接的干扰. 怎样为评论链接加上这个 nofollow 属性呢? 或许你已经找到生成评论链接的方法: comments_popup_link. 并准备如同处理 Read more 一样为链接加上 nofollow, 但是最终发现这个方法不能使用 filter. 是的, 这个方式不能这样搞, 三年前就有人认为这是一个 bug 了. 其实不然, 该方法在打印 a 标签的 title 属性前有以下语句: echo apply_filters&#40; 'comments_popup_link_attributes', '' &#41;; 什么意思? 说明可以通过 comments_popup_link_attributes 为链接加上其他属性. 所以我们可以在 function.php 或者在插件中加入以下代码来为 WordPress [...]<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></description>
			<content:encoded><![CDATA[<h3>为什么要为 WordPress 的评论链接加上 nofollow?</h3>
<p>
1. 与 Read more 链接同样, comment 这种词语在网络中泛滥出现.<br />
2. 为了让爬虫明确链接相关内容 (尤其是内链), 应该保证链接在页面中是唯一的.<br />
所以需要 nofollow 掉这些评论链接, 以减少对文章链接的干扰.
</p>
<p><span id="more-1443"></span></p>
<div class="right inline">
<img class="sided" src="http://photo.tuhigh.com/pics/1039/0921/187252t1285059741542_o.png" alt="WordPress 评论链接加 nofollow" />
</div>
<h3>怎样为评论链接加上这个 nofollow 属性呢?</h3>
<p>
或许你已经找到生成评论链接的方法: <strong>comments_popup_link</strong>.
</p>
<p>
并准备如同<a href="http://www.neoease.com/add-nofollow-to-read-more-link-on-wordpress/">处理 Read more 一样为链接加上 nofollow</a>, 但是最终发现这个方法不能使用 filter. 是的, 这个方式不能这样搞, <a rel="external nofollow" href="http://core.trac.wordpress.org/ticket/5247">三年前就有人认为这是一个 bug</a> 了.
</p>
<p>
其实不然, 该方法在打印 a 标签的 title 属性前有以下语句:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> apply_filters<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'comments_popup_link_attributes'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
什么意思? 说明可以通过 <strong>comments_popup_link_attributes </strong>为链接加上其他属性. 所以我们可以在 function.php 或者在插件中加入以下代码来为 WordPress 的评论链接加上 nofollow:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> add_nofollow_to_comments_popup_link<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">' rel=&quot;nofollow&quot; '</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comments_popup_link_attributes'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'add_nofollow_to_comments_popup_link'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
更多 WordPress SEO 相关技巧请参考<a href="http://www.neoease.com/wordpress-seo-tips/">《WordPress SEO 技巧》</a></p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1443" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/add-nofollow-to-read-more-link-on-wordpress/" rel="bookmark">为 WordPress 的 Read more 加上 nofollow</a><!-- (18.4)--></li>
		<li><a href="http://www.neoease.com/wordpress-27-trackbacks-handles/" rel="bookmark">WordPress 2.7 Trackbacks 的两种处理方法</a><!-- (6.8)--></li>
		<li><a href="http://www.neoease.com/wordpress-comment-seo/" rel="bookmark">WordPress 评论 SEO</a><!-- (6.8)--></li>
		<li><a href="http://www.neoease.com/wordpress-seo-tips/" rel="bookmark">WordPress SEO 技巧</a><!-- (6.7)--></li>
		<li><a href="http://www.neoease.com/ajax-load-wordpress-post-response/" rel="bookmark">WordPress AJAX 加载文章内容 - 后台处理</a><!-- (6.2)--></li>
	</ul>
<p><hr color="#E0E0E0" />
<div>
Copyright &copy; 2007-2010 NeoEase. All rights reserved.<br />
<a href="http://www.neoease.com" target="_blank">NeoEase.com</a> | <a target="_blank" href="http://twitter.com/mg12" rel="nofollow">Twitter</a> | <a target="_blank" href="http://weibo.com/mg12" rel="nofollow">新浪微博</a> | <a target="_blank" href="http://www.douban.com/people/mg12" rel="nofollow">豆瓣</a> | <a target="_blank" href="http://www.zhihu.com/people/mg12" rel="nofollow">知乎</a>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neoease.com/add-nofollow-to-comment-link-on-wordpress/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
	</channel>
</rss>

