wp_list_bookmarks()
云策文档标注
概述
wp_list_bookmarks() 函数用于检索或输出所有书签链接,支持按分类显示和多种自定义参数。开发者可通过参数控制排序、分类、显示方式等,函数内部使用 get_bookmarks() 和 _walk_bookmarks() 处理数据。
关键要点
- 函数功能:检索或输出书签链接,默认按分类显示,可返回 HTML 字符串或直接输出。
- 参数控制:支持 orderby、order、limit、category、categorize、echo 等参数,用于自定义排序、限制数量、指定分类、控制输出方式。
- 分类处理:当 categorize 为 true 时,使用 get_terms() 获取链接分类,并应用 category_before 和 category_after 参数进行 HTML 包装。
- 输出逻辑:根据 categorize 和 title_li 参数决定输出结构,使用 _walk_bookmarks() 生成链接列表。
- 过滤器:提供 link_category 和 wp_list_bookmarks 过滤器,允许自定义分类名称和输出 HTML。
- 返回值:echo 参数为 true 时返回 void,为 false 时返回 HTML 字符串。
代码示例
// 简单列表,显示所有书签,标题为“Bookmarks”,使用 ul 标签包装
wp_list_bookmarks();
// 无标题的简单列表
wp_list_bookmarks('title_li=');
// 显示特定分类(ID 为 2)的书签,按 URL 排序,使用 span 标签,显示图片,不显示描述
wp_list_bookmarks('category=2&before=&after=&show_images=1&show_description=0&orderby=url');
// 显示所有书签,使用有序列表,显示描述、评分和更新时间戳,按 ID 排序,不显示图片
wp_list_bookmarks('categorize=0&show_images=0&orderby=id&show_rating=1&show_updated=1');
// 使用主题文件夹中的图片替换标题文本
wp_list_bookmarks('title_before=&title_after=&title_li=');注意事项
- 参数默认值:如 orderby 默认为 'name',categorize 默认为 true,echo 默认为 true(直接输出)。
- 分类显示:categorize 参数控制是否按分类分组,影响 category_before 和 category_after 的使用。
- HTML 包装:title_before、title_after、category_before、category_after 参数用于自定义标题和分类的 HTML 结构。
- 相关函数:内部依赖 get_bookmarks()、_walk_bookmarks()、get_terms() 等函数,确保这些函数正常工作。
- 过滤器应用:可通过 apply_filters 钩子自定义输出,如修改分类名称或整个书签列表 HTML。
原文内容
Retrieves or echoes all of the bookmarks.
Description
List of default arguments are as follows:
These options define how the Category name will appear before the category links are displayed, if ‘categorize’ is 1. If ‘categorize’ is 0, then it will display for only the ‘title_li’ string and only if ‘title_li’ is not empty.
See also
Parameters
$argsstring|arrayoptional-
String or array of arguments to list bookmarks.
orderbystringHow to order the links by. Accepts post fields. Default'name'.orderstringWhether to order bookmarks in ascending or descending order.
Accepts'ASC'(ascending) or'DESC'(descending). Default'ASC'.limitintAmount of bookmarks to display. Accepts 1+ or -1 for all.
Default -1.categorystringComma-separated list of category IDs to include links from.
Default empty.category_namestringCategory to retrieve links for by name. Default empty.hide_invisibleint|boolWhether to show or hide links marked as'invisible'. Accepts1|trueor0|false. Default1|true.show_updatedint|boolWhether to display the time the bookmark was last updated.
Accepts1|trueor0|false. Default0|false.echoint|boolWhether to echo or return the formatted bookmarks. Accepts1|true(echo) or0|false(return). Default1|true.categorizeint|boolWhether to show links listed by category or in a single column.
Accepts1|true(by category) or0|false(one column). Default1|true.show_descriptionint|boolWhether to show the bookmark descriptions. Accepts1|trueor0|false.
Default0|false.title_listringWhat to show before the links appear. Default'Bookmarks'.title_beforestringThe HTML or text to prepend to the $title_li string. Default<code><h2>.title_afterstringThe HTML or text to append to the $title_li string. Default<code></h2>.classstring|arrayThe CSS class or an array of classes to use for the $title_li.
Default'linkcat'.category_beforestringThe HTML or text to prepend to $title_before if $categorize is true.
String must contain'%id'and'%class'to inherit the category ID and the $class argument used for formatting in themes.
Default<li id="%id" class="%class">.category_afterstringThe HTML or text to append to $title_after if $categorize is true.
Default<code></li>.category_orderbystringHow to order the bookmark category based on term scheme if $categorize is true. Default'name'.category_orderstringWhether to order categories in ascending or descending order if $categorize is true. Accepts'ASC'(ascending) or'DESC'(descending).
Default'ASC'.
Source
function wp_list_bookmarks( $args = '' ) {
$defaults = array(
'orderby' => 'name',
'order' => 'ASC',
'limit' => -1,
'category' => '',
'exclude_category' => '',
'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',
'class' => 'linkcat',
'category_before' => '<li id="%id" class="%class">',
'category_after' => '</li>',
);
$parsed_args = wp_parse_args( $args, $defaults );
$output = '';
if ( ! is_array( $parsed_args['class'] ) ) {
$parsed_args['class'] = explode( ' ', $parsed_args['class'] );
}
$parsed_args['class'] = array_map( 'sanitize_html_class', $parsed_args['class'] );
$parsed_args['class'] = trim( implode( ' ', $parsed_args['class'] ) );
if ( $parsed_args['categorize'] ) {
$cats = get_terms(
array(
'taxonomy' => 'link_category',
'name__like' => $parsed_args['category_name'],
'include' => $parsed_args['category'],
'exclude' => $parsed_args['exclude_category'],
'orderby' => $parsed_args['category_orderby'],
'order' => $parsed_args['category_order'],
'hierarchical' => 0,
)
);
if ( empty( $cats ) ) {
$parsed_args['categorize'] = false;
}
}
if ( $parsed_args['categorize'] ) {
// Split the bookmarks into ul's for each category.
foreach ( (array) $cats as $cat ) {
$params = array_merge( $parsed_args, array( 'category' => $cat->term_id ) );
$bookmarks = get_bookmarks( $params );
if ( empty( $bookmarks ) ) {
continue;
}
$output .= str_replace(
array( '%id', '%class' ),
array( "linkcat-$cat->term_id", $parsed_args['class'] ),
$parsed_args['category_before']
);
/**
* Filters the category name.
*
* @since 2.2.0
*
* @param string $cat_name The category name.
*/
$catname = apply_filters( 'link_category', $cat->name );
$output .= $parsed_args['title_before'];
$output .= $catname;
$output .= $parsed_args['title_after'];
$output .= "nt<ul class='xoxo blogroll'>n";
$output .= _walk_bookmarks( $bookmarks, $parsed_args );
$output .= "nt</ul>n";
$output .= $parsed_args['category_after'] . "n";
}
} else {
// Output one single list using title_li for the title.
$bookmarks = get_bookmarks( $parsed_args );
if ( ! empty( $bookmarks ) ) {
if ( ! empty( $parsed_args['title_li'] ) ) {
$output .= str_replace(
array( '%id', '%class' ),
array( 'linkcat-' . $parsed_args['category'], $parsed_args['class'] ),
$parsed_args['category_before']
);
$output .= $parsed_args['title_before'];
$output .= $parsed_args['title_li'];
$output .= $parsed_args['title_after'];
$output .= "nt<ul class='xoxo blogroll'>n";
$output .= _walk_bookmarks( $bookmarks, $parsed_args );
$output .= "nt</ul>n";
$output .= $parsed_args['category_after'] . "n";
} else {
$output .= _walk_bookmarks( $bookmarks, $parsed_args );
}
}
}
/**
* Filters the bookmarks list before it is echoed or returned.
*
* @since 2.5.0
*
* @param string $html The HTML list of bookmarks.
*/
$html = apply_filters( 'wp_list_bookmarks', $output );
if ( $parsed_args['echo'] ) {
echo $html;
} else {
return $html;
}
}
Hooks
- apply_filters( ‘link_category’, string $cat_name )
-
Filters the category name.
- apply_filters( ‘wp_list_bookmarks’, string $html )
-
Filters the bookmarks list before it is echoed or returned.
Changelog
| Version | Description |
|---|---|
| 2.1.0 | Introduced. |
Skip to note 6 content
Codex
Simple List
Displays all bookmarks with the title “Bookmarks” and with items wrapped in tags. The title is wrapped in h2 tags.
Skip to note 7 content
Codex
Simple List without the Heading
Displays all bookmarks as above, but does not include the default heading.
Skip to note 8 content
Codex
Specific Category Sorted by URL
Displays bookmarks for Category ID 2 in span tags, uses images for bookmarks, does not show descriptions, sorts by bookmark URL.
&after;=</span>&show;_images=1&show;_description=0&orderby;=url'); ?>Skip to note 9 content
Codex
Shows Ratings and Timestamp
Displays all bookmarks in an ordered list with descriptions on a new line, does not use images for bookmarks, sorts by bookmark id, shows ratings and last-updated timestamp (Note that the last updated timestamp does not track local modifications. It tracks when whatever the link points to is updated via remote requests to pingomatic.)
<ol> &show;_images=0&orderby;=id&show;_rating=1&show;_updated=1'); ?> </ol>Skip to note 10 content
Codex
Replaces Heading with Image
Uses an image from the theme folder instead of plain text.