WordPress的链接模块默认只能显示所有的链接,满足不了复杂的人际关系网。同时强大的WordPress又内置了相关的函数供我们自定义,下面hankcs来介绍一下如何让WordPress显示链接分类。
要修改链接,先看看有什么函数可用。wp_list_bookmarks 是 WordPress 中用来显示友情链接的函数,已经有人用中文讲解了该函数的参数设置和使用,待会儿会给大家列出来。目前大部分主题都用 wp_list_bookmarks 这个函数来显示友情链接,比如说我的主题就是,打开footer.php,会看到这么一段:
<div class="links"> <h3 class="title"><strong class="right"> <a href="<?php echo rewrite_url('add_links'); ?>" title="申请链接" >申请链接</a> | <a href="<?php echo rewrite_url('links'); ?>" title="所有链接" >所有链接</a> </strong>友情链接</h3> <ul> <?php echo wp_list_bookmarks('title_li=&title_before=&title_after=&categorize=0&orderby=id&order=DESC&category=&echo=0'); ?> <div class="clear"></div> </ul> <div class="clear"></div> </div>
上面的代码中的<?php echo wp_list_bookmarks('title_li=&title_before=&title_after=&categorize=0&orderby=id&order=DESC&category=&echo=0'); ?>使用了许多参数,这些参数的作用请查阅下表:
//按啥排序 'orderby' => 'name', //升序、降序 'order' => 'ASC', //输出多少条 'limit' => -1, //指定分类id 'category' => '', //排除分类id 'exclude_category' => '', //指定要显示的分类名,貌似不好用版本3.4.1 'category_name' => '', //是否隐藏后台设置的私密链接 'hide_invisible' => 1, //是否显示最新 'show_updated' => 0, //是显示还是返回字符串 'echo' => 1, //用于设置连接是否按照各自的分类显示 'categorize' => 1, //标题名字 'title_li' => __('Bookmarks'), //标题前代码 'title_before' => '<h2>', //标题后代码 'title_after' => '</h2>', //分类排序规则 'category_orderby' => 'name', //升降序 'category_order' => 'ASC', //分类的css中的class值 'class' => 'linkcat', //分类前html代码%id和%class是系统默认占位符 'category_before' => '<li id="%id" class="%class">', //分类后HTML代码 'category_after' => '</li>'
有了这份说明就可以完成基础的定制了,但是想要实现检索所有的分类名称还是需要动用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'
检索出数据之后再将其遍历输出,最终的代码就是:
<div class="links"> <h3 class="title"><strong class="right"> <a href="<?php echo rewrite_url('add_links'); ?>" title="申请链接" >申请链接</a> | <a href="<?php echo rewrite_url('links'); ?>" title="所有链接" >所有链接</a> </strong>友情链接</h3> <?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) : ?> <?php echo $linkcat->name; ?> <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> <?php endforeach; endif; ?> </div> </div>
分类之后的效果:
顺便附录一份详细的说明,供大家做高级的定制:
下面我来一一介绍每个参数的用途:
categorize
布尔型,用于设置连接是否按照各自的分类显示:
1 (默认,根据链接的分类显示)
0 (不按照分类,显示全部)
category
字符串型,后面就直接 “=链接分类ID号”,那么就显示这个分类下的链接。如果没有指定的话就显示所有的链接。
category_name
字符串型,如果后面 “=某个链接分类的名称” 那么就会在该链接分类前显示分类的名称,如果这里留空的话则会显示所有链接分类的分类名称(即默认的形式)。
category_before
字符串型,位于链接分类之前的文字或代码。默认的设置是:
category_after字符串型,位于链接分类之后的文字或代码。默认的设置是:
class
字符串型,每一个链接的分类都会有一个 “class” 属性(从上面的代码就能看出),默认是:linkcat
category_orderby
字符串型,链接分类的排序方式,按照名词或者ID。
‘name’ (默认)
‘id’
category_order
字符串型,链接分类的升降序排列方式:
ASC (默认)
DESC
title_li
字符串型,链接标题的头文字或代码,默认是:Bookmarks,并且它控制连接是否按照列表的方式排列。
title_before 和 title_after
顾名思义,它们就是连接标题头前后的文字或代码,默认是 h2 标签
show_private
布尔型,是否显示私有链接。
1 (是)
0 (不是 – 默认)
include
字符串型,输出指定 ID 的 Blogroll 的分类链接,各个 ID 之间用半角的 “,” 分开。默认显示所有的 Blogroll 分类。
exclude
字符串型,将指定 ID 的 Blogroll 分类链接从整个链接列表中排除,各个 ID 之间用半角的 “,” 分开。默认是什么都不排除。
orderby
字符串型,Blogroll 的排列方式(默认是根据名称排序,除非将这个值留空),即根据我们在 WP 后台链接设置界面下的那些参数来进行排序:
1'id'2'url'3'name'4'target'5'description'6'owner'7'rating'8'updated'9'rel' – 按设定的关系排列10'notes'11'rss'12'length' – 连接名称的长度设定13'rand' – 随机排列显示
order
字符串型,设置升降序的排列方式
ASC (默认)
DESC
limit
整型,设置输出链接条数的最大值。默认值是”-1″,输出全部。
between
字符串型,每个连接、图片和描述之间的文字或代码,默认是 “n” 换行。
show_images
布尔型,是否允许显示 Blogroll 下链接的对应图片。
1 (允许 – 默认)
0 (不允许)
show_description
布尔型,是否允许显示每个链接的描述。
1 (允许)
0 (不允许 – 默认)
show_rating
布尔型,是否允许显示链接的等级。
1 (允许)
0 (不允许 – 默认)
show_updated
布尔型,是否允许显示最近更新后的时间戳。
1 (允许)
0 (不允许 – 默认)
hide_invisible
布尔型,是否显示所有的链接,甚至是被管理员设为不可见的链接,默认允许显示。
1 (允许 – 默认)
0 (不允许)
get_links 函数的参数:
1get_links(category, 'before', 'after','between', show_images,'order',show_description,show_rating, limit,show_updated, echo);
==========================================================
其中catagory为友情链接显示模式;before为显示在友情链接前端参数,after为后;between为每条友情链接之间的参数。show_images是否显示Logo,order排列方式;show_description显示链接描述,show_rating显示等级,limit显示链接个数,show_updated显示最后一次更新时间。
order是按照什么排序,可以包括:
1'id'2'url'3'name'4'target'5'category'6'description'7'owner' – User who added link through Links Manager.8'rating'9'updated'10'rel' – Link relationship (XFN).11'notes'12'rss'13'length' – The length of the link name, shortest to longest.
1<?php get_links('2', '<li>', '</li>', '<br />', FALSE, 'id', FALSE, FALSE, -1, FALSE); ?>
意思是显示分类ID为2的链接,以链接的ID排序,不显示链接的Logo,不显示链接的描述,不显示等级,分类2下的链接全部显示,不显示最后一次更新时间。把上面的2换成-1则是显示全部链接。
这个的缺陷就是不能显示链接分类目录名,要自己添加,而wp_list_bookmarks 函数就不需要这么做,正因为这样的方便,wp_list_bookmarks 函数取代get_links 函数就理所当然了。
参数表转自翔子的博客。
像我爱搜罗网那样显示指定链接分类下的链接如何实现
谢谢站长。学习了!谢谢谢谢!!!