您的位置:首页 > 其它

WordPress 按分类显示友情链接

2011-10-27 19:57 274 查看


WordPress 按分类显示友情链接

友情链接仍是网站推广的一个重要手段, 网站之间频繁的链接交换活动使得Links 页面似乎已经成为了每个博客的必须的组成部分. WordPress 系统的 default 主题也自带了这个页面模板 (links.php).

我的主题同样带有页面模板, 但为了界面美观和简化处理, 我并没有将这些链接按分类来进行显示. 后来我觉得按分类处理还是有必要的, 不久前我开始在自己博客上做了些相关实验, 貌似网友们也比较喜欢将链接按分类进行显示.


那怎样才能按分类来显示友情链接呢?

咱们先了解一下获取链接列表的方法.

请打开 default 主题的 links.php 文件, 它的内容很简单, 调用链接列表的代码如下:

<?php wp_list_bookmarks(); ?>


这句代码将调出所有链接, 并按分类显示出来, 是一个嵌套的列表结构. 关于 wp_list_bookmarks 方法可以参看 wp-includes/bookmark-template.php 的源代码和 Codex 的使用说明.


既然实现如此简单方便, 为什么不使用这个代码来做呢?

因为代码结构不易进行加工, 所以我将所有链接不分类进行处理, 代码如下:

<?php wp_list_bookmarks('title_li=&categorize=0&orderby=rand'); ?>


这段代码的意思是: 没有标题, 不进行分类, 链接位置随机安排.

在 iNove 中整个链接框的实现代码如下:

<div class="boxcaption"><h3><?php _e('Blogroll', 'inove'); ?></h3></div>
<div class="box linkcat">
<ul><?php wp_list_bookmarks('title_li=&categorize=0&orderby=rand'); ?></ul>
<div class="fixed"></div>
</div>



那是否可以按照自己的意愿来显示其中一个分类呢?

是可以的! 我们可以通过以下代码只获取属于名字为 'firend' 的分类的所有链接:

<?php $bookmarks = get_bookmarks('category_name=firend'); ?>


关于 get_bookmarks 方法可以参看 wp-includes/bookmark.php 的源代码和 Codex 的使用说明.

那么我们可以通过下面的代码来显示名字为 'firend' 的分类的链接, 取代显示所有链接.

<div class="boxcaption"><h3>firend</h3></div>
<div class="box linkcat">
<ul>
<?php
$bookmarks = get_bookmarks('category_name=firend');
if ( !empty($bookmarks) ) {
foreach ($bookmarks as $bookmark) {
echo '<li><a href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '">' . $bookmark->link_name . '</a></li>';
}
}
?>
</ul>
<div class="fixed"></div>
</div>



既然一个可以显示, 是不是所有分类都可以这样显示出来?

当然可以, 现在要想办法把所有链接分类找出来. 为此, 我们可以先看一下数据库中分类的存储结构:



可以看出, 我们只需要在 terms 表中出去相应数据元组对应的 name 属性就 OK 了. 所以这里需要通过 term_id 和 terms_taxonomy 表联一下, 并且将 taxonomy 的值限定为 'link_category'. SQL 如下:

SELECT T1.name AS name
FROM   $wpdb->terms T1,
$wpdb->term_taxonomy T2
WHERE  T1.term_id = T2.term_id
AND    T2.taxonomy = 'link_category'


通过以上 SQL 我们可以将所有链接分类的名字找出来, 然后做一个循环处理, 把链接按照分类查找出来, 并置于页面中.

<?php
$linkcats = $wpdb->get_results("SELECT T1.name AS name FROM $wpdb->terms T1, $wpdb->term_taxonomy T2 WHERE T1.term_id = T2.term_id AND T2.taxonomy = 'link_category'");
if($linkcats) : foreach($linkcats as $linkcat) : ?>
<div class="boxcaption"><h3><?php echo $linkcat->name; ?></h3></div>
<div class="box linkcat">
<ul>
<?php
$bookmarks = get_bookmarks('orderby=rand&category_name=' . $linkcat->name);
if ( !empty($bookmarks) ) {
foreach ($bookmarks as $bookmark) {
echo '<li><a href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '">' . $bookmark->link_name . '</a></li>';
}
}
?>
</ul>
<div class="fixed"></div>
</div>
<?php endforeach; endif; ?>


使用 default 主题的处理方法的好处是简单, 方便, 但缺乏灵活性. 对于后一种方法, 需要有些许代码能力才能实现, 但并不是很难. 在决定要使用什么方法前请权衡时间, 能力, 需求等多方面的因素, 不可能尽善尽美, 适合自己就是最好的. 请不要发信请求我帮你修改, 我会在所有主题的下个版本中加入这个功能.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: