放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

让WordPress显示链接分类

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 函数就理所当然了。

参数表转自翔子的博客。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 让WordPress显示链接分类

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #2

    像我爱搜罗网那样显示指定链接分类下的链接如何实现

    Mr.Wu9年前 (2015-11-05)回复
  2. #1

    谢谢站长。学习了!谢谢谢谢!!!

    狮子小鹿9年前 (2015-09-25)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》