<?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; Links</title>
	<atom:link href="http://www.neoease.com/tag/links/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/show-wordpress-links-order-by-category/</link>
		<comments>http://www.neoease.com/show-wordpress-links-order-by-category/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 07:45:03 +0000</pubDate>
		<dc:creator>mg12</dc:creator>
				<category><![CDATA[WP Trick]]></category>
		<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.neoease.com/?p=872</guid>
		<description><![CDATA[友情链接仍是网站推广的一个重要手段, 网站之间频繁的链接交换活动使得Links 页面似乎已经成为了每个博客的必须的组成部分. WordPress 系统的 default 主题也自带了这个页面模板 (links.php). 我的主题同样带有页面模板, 但为了界面美观和简化处理, 我并没有将这些链接按分类来进行显示. 后来我觉得按分类处理还是有必要的, 不久前我开始在自己博客上做了些相关实验, 貌似网友们也比较喜欢将链接按分类进行显示. 那怎样才能按分类来显示友情链接呢? 咱们先了解一下获取链接列表的方法. 请打开 default 主题的 links.php 文件, 它的内容很简单, 调用链接列表的代码如下: &#60;?php wp_list_bookmarks&#40;&#41;; ?&#62; 这句代码将调出所有链接, 并按分类显示出来, 是一个嵌套的列表结构. 关于 wp_list_bookmarks 方法可以参看 wp-includes/bookmark-template.php 的源代码和 Codex 的使用说明. 既然实现如此简单方便, 为什么不使用这个代码来做呢? 因为代码结构不易进行加工, 所以我将所有链接不分类进行处理, 代码如下: &#60;?php wp_list_bookmarks&#40;'title_li=&#38;categorize=0&#38;orderby=rand'&#41;; ?&#62; 这段代码的意思是: 没有标题, 不进行分类, 链接位置随机安排. 在 iNove 中整个链接框的实现代码如下: &#60;div class=&#34;boxcaption&#34;&#62;&#60;h3&#62;&#60;?php _e&#40;'Blogroll', 'inove'&#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>
友情链接仍是网站推广的一个重要手段, 网站之间频繁的链接交换活动使得<strong>Links 页面</strong>似乎已经成为了每个博客的必须的组成部分. WordPress 系统的 default 主题也自带了这个页面模板 (links.php).
</p>
<p>
我的主题同样带有页面模板, 但为了界面美观和简化处理, 我并没有将这些链接按分类来进行显示. 后来我觉得按分类处理还是有必要的, 不久前我开始在自己博客上做了些相关实验, 貌似网友们也比较喜欢将链接按分类进行显示.
</p>
<p><span id="more-872"></span></p>
<h3>那怎样才能按分类来显示友情链接呢?</h3>
<p>
咱们先了解一下获取链接列表的方法.<br />
请打开 default 主题的 links.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> wp_list_bookmarks<span style="color: #009900;">&#40;</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>
这句代码将调出所有链接, 并按分类显示出来, 是一个嵌套的列表结构. 关于 wp_list_bookmarks 方法可以参看 wp-includes/bookmark-template.php 的源代码和 <a href="http://codex.wordpress.org/Template_Tags/wp_list_bookmarks">Codex 的使用说明</a>.
</p>
<h3>既然实现如此简单方便, 为什么不使用这个代码来做呢?</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_list_bookmarks<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title_li=&amp;categorize=0&amp;orderby=rand'</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>
这段代码的意思是: 没有标题, 不进行分类, 链接位置随机安排.<br />
在 iNove 中整个链接框的实现代码如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div class=&quot;boxcaption&quot;&gt;&lt;h3&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> _e<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Blogroll'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'inove'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h3&gt;&lt;/div&gt;
&lt;div class=&quot;box linkcat&quot;&gt;
	&lt;ul&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> wp_list_bookmarks<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title_li=&amp;categorize=0&amp;orderby=rand'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/ul&gt;
	&lt;div class=&quot;fixed&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</pre></div></div>

<h3>那是否可以按照自己的意愿来显示其中一个分类呢?</h3>
<p>
是可以的! 我们可以通过以下代码只获取属于名字为 'firend' 的分类的所有链接:
</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;">$bookmarks</span> <span style="color: #339933;">=</span> get_bookmarks<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'category_name=firend'</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>
关于 get_bookmarks 方法可以参看 wp-includes/bookmark.php 的源代码和 <a href="http://codex.wordpress.org/Function_Reference/get_bookmarks">Codex 的使用说明</a>.
</p>
<p>那么我们可以通过下面的代码来显示名字为 'firend' 的分类的链接, 取代显示所有链接.
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;div class=&quot;boxcaption&quot;&gt;&lt;h3&gt;firend&lt;/h3&gt;&lt;/div&gt;
&lt;div class=&quot;box linkcat&quot;&gt;
	&lt;ul&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span>
		<span style="color: #000088;">$bookmarks</span> <span style="color: #339933;">=</span> get_bookmarks<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'category_name=firend'</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;">$bookmarks</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$bookmarks</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$bookmark</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;li&gt;&lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_url</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; title=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_description</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;/ul&gt;
	&lt;div class=&quot;fixed&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</pre></div></div>

<h3>既然一个可以显示, 是不是所有分类都可以这样显示出来?</h3>
<p>
当然可以, 现在要想办法把所有链接分类找出来. 为此, 我们可以先看一下数据库中分类的存储结构:
</p>
<p>
<img class="sided" src="http://farm4.static.flickr.com/3565/3667626650_581539007d_o.png" alt="WordPress Taxonomy" />
</p>
<p>
可以看出, 我们只需要在 terms 表中出去相应数据元组对应的 name 属性就 OK 了. 所以这里需要通过 term_id 和 terms_taxonomy 表联一下, 并且将 taxonomy 的值限定为 'link_category'. SQL 如下:
</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> T1<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">AS</span> name
<span style="color: #993333; font-weight: bold;">FROM</span>   $wpdb<span style="color: #66cc66;">-&gt;</span>terms T1<span style="color: #66cc66;">,</span>
       $wpdb<span style="color: #66cc66;">-&gt;</span>term_taxonomy T2
<span style="color: #993333; font-weight: bold;">WHERE</span>  T1<span style="color: #66cc66;">.</span>term_id <span style="color: #66cc66;">=</span> T2<span style="color: #66cc66;">.</span>term_id
<span style="color: #993333; font-weight: bold;">AND</span>    T2<span style="color: #66cc66;">.</span>taxonomy <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'link_category'</span></pre></div></div>

<p>
通过以上 SQL 我们可以将所有链接分类的名字找出来, 然后做一个循环处理, 把链接按照分类查找出来, 并置于页面中.
</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;">$linkcats</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_results</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT T1.name AS name FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;terms</span> T1, <span style="color: #006699; font-weight: bold;">$wpdb-&gt;term_taxonomy</span> T2 WHERE T1.term_id = T2.term_id AND T2.taxonomy = 'link_category'&quot;</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: #000088;">$linkcats</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$linkcats</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$linkcat</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;div class=&quot;boxcaption&quot;&gt;&lt;h3&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$linkcat</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h3&gt;&lt;/div&gt;
	&lt;div class=&quot;box linkcat&quot;&gt;
		&lt;ul&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span>
				<span style="color: #000088;">$bookmarks</span> <span style="color: #339933;">=</span> get_bookmarks<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'orderby=rand&amp;category_name='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$linkcat</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</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;">$bookmarks</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$bookmarks</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$bookmark</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;li&gt;&lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_url</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; title=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_description</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$bookmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link_name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/ul&gt;
		&lt;div class=&quot;fixed&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>
使用 default 主题的处理方法的好处是简单, 方便, 但缺乏灵活性. 对于后一种方法, 需要有些许代码能力才能实现, 但并不是很难. 在决定要使用什么方法前请权衡时间, 能力, 需求等多方面的因素, 不可能尽善尽美, 适合自己就是最好的. 请不要发信请求我帮你修改, 我会在所有主题的下个版本中加入这个功能.</p>
 <img src="http://www.neoease.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=872" width="1" height="1" style="display: none;" /><ul>
		<li><a href="http://www.neoease.com/wordpress-comment-pages-bug/" rel="bookmark">WordPress 评论分页的一个 bug 与解决办法</a><!-- (8.8)--></li>
		<li><a href="http://www.neoease.com/show-different-widgets-in-wordpress-sidebar/" rel="bookmark">WordPress 不同页面显示不一样的侧边栏</a><!-- (7.3)--></li>
		<li><a href="http://www.neoease.com/wordpress-bogus-users/" rel="bookmark">WordPress 防止冒充留言</a><!-- (6.6)--></li>
		<li><a href="http://www.neoease.com/spliting-blogroll-to-2-columns-02/" rel="bookmark">将 Blogroll 分为两栏 (2)</a><!-- (6.5)--></li>
		<li><a href="http://www.neoease.com/ajax-load-wordpress-post-response/" rel="bookmark">WordPress AJAX 加载文章内容 - 后台处理</a><!-- (6.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/show-wordpress-links-order-by-category/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
	</channel>
</rss>

