_walk_bookmarks()
云策文档标注
概述
_walk_bookmarks() 是 WordPress 内部函数,用于遍历书签数组并生成 HTML 格式的输出。它被 wp_list_bookmarks() 调用,主题开发者不应直接使用。
关键要点
- 函数接受一个书签对象数组作为必需参数,并可选地接受一个参数数组来控制输出格式。
- 输出为 HTML 格式,不可更改,但可以通过参数调整书签前后的内容、链接内部内容以及描述、图片、名称、评分等的显示。
- 参数包括 show_updated、show_description、show_images、show_name、before、after、link_before、link_after、between、show_rating 等,用于定制化输出。
- 函数内部使用 wp_parse_args() 合并默认参数,并遍历书签数组构建输出字符串。
代码示例
function _walk_bookmarks( $bookmarks, $args = '' ) {
$defaults = array(
'show_updated' => 0,
'show_description' => 0,
'show_images' => 1,
'show_name' => 0,
'before' => '',
'after' => '',
'between' => "n",
'show_rating' => 0,
'link_before' => '',
'link_after' => '',
);
$parsed_args = wp_parse_args( $args, $defaults );
$output = ''; // Blank string to start with.
foreach ( (array) $bookmarks as $bookmark ) {
if ( ! isset( $bookmark->recently_updated ) ) {
$bookmark->recently_updated = false;
}
$output .= $parsed_args['before'];
if ( $parsed_args['show_updated'] && $bookmark->recently_updated ) {
$output .= '';
}
$the_link = '#';
if ( ! empty( $bookmark->link_url ) ) {
$the_link = esc_url( $bookmark->link_url );
}
$desc = esc_attr( sanitize_bookmark_field( 'link_description', $bookmark->link_description, $bookmark->link_id, 'display' ) );
$name = esc_attr( sanitize_bookmark_field( 'link_name', $bookmark->link_name, $bookmark->link_id, 'display' ) );
$title = $desc;
if ( $parsed_args['show_updated'] ) {
if ( ! str_starts_with( $bookmark->link_updated_f, '00' ) ) {
$title .= ' (';
$title .= sprintf(
/* translators: %s: Date and time of last update. */
__( 'Last updated: %s' ),
gmdate(
get_option( 'links_updated_date_format' ),
$bookmark->link_updated_f + (int) ( (float) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS )
)
);
$title .= ')';
}
}
$alt = ' alt="' . $name . ( $parsed_args['show_description'] ? ' ' . $title : '' ) . '"';
if ( '' !== $title ) {
$title = ' title="' . $title . '"';
}
$rel = $bookmark->link_rel;
$target = $bookmark->link_target;
if ( '' !== $target ) {
$target = ' target="' . $target . '"';
}
if ( '' !== $rel ) {
$rel = ' rel="' . esc_attr( $rel ) . '"';
}
$output .= '';
$output .= $parsed_args['link_before'];
if ( '' !== $bookmark->link_image && $parsed_args['show_images'] ) {
if ( str_starts_with( $bookmark->link_image, 'http' ) ) {
$output .= 'link_image . '"' . $alt . $title . ' />';
} else { // If it's a relative path.
$output .= 'link_image . '"' . $alt . $title . ' />';
}
if ( $parsed_args['show_name'] ) {
$output .= " $name";
}
} else {
$output .= $name;
}
$output .= $parsed_args['link_after'];
$output .= '';
if ( $parsed_args['show_updated'] && $bookmark->recently_updated ) {
$output .= '';
}
if ( $parsed_args['show_description'] && '' !== $desc ) {
$output .= $parsed_args['between'] . $desc;
}
if ( $parsed_args['show_rating'] ) {
$output .= $parsed_args['between'] . sanitize_bookmark_field(
'link_rating',
$bookmark->link_rating,
$bookmark->link_id,
'display'
);
}
$output .= $parsed_args['after'] . "n";
} // End while.
return $output;
}注意事项
- 此函数是内部函数,主题开发者应使用 wp_list_bookmarks() 来显示书签列表。
- 输出格式固定为 HTML,但可以通过参数灵活控制内容显示和布局。
- 函数使用多个辅助函数如 esc_url()、esc_attr()、sanitize_bookmark_field() 等来确保输出安全。
原文内容
The formatted output of a list of bookmarks.
Description
The $bookmarks array must contain bookmark objects and will be iterated over to retrieve the bookmark to be used in the output.
The output is formatted as HTML with no way to change that format. However, what is between, before, and after can be changed. The link itself will be HTML.
This function is used internally by wp_list_bookmarks() and should not be used by themes.
Parameters
$bookmarksarrayrequired-
List of bookmarks to traverse.
$argsstring|arrayoptional-
Bookmarks arguments.
show_updatedint|boolWhether to show the time the bookmark was last updated.
Accepts1|trueor0|false. Default0|false.show_descriptionint|boolWhether to show the bookmark description. Accepts1|true, Accepts1|trueor0|false. Default0|false.show_imagesint|boolWhether to show the link image if available. Accepts1|trueor0|false. Default1|true.show_nameint|boolWhether to show link name if available. Accepts1|trueor0|false. Default0|false.beforestringThe HTML or text to prepend to each bookmark. Default<li>.afterstringThe HTML or text to append to each bookmark. Default</li>.link_beforestringThe HTML or text to prepend to each bookmark inside the anchor tags. Default empty.link_afterstringThe HTML or text to append to each bookmark inside the anchor tags. Default empty.betweenstringThe string for use in between the link, description, and image.
Default “n”.show_ratingint|boolWhether to show the link rating. Accepts1|trueor0|false.
Default0|false.
Source
function _walk_bookmarks( $bookmarks, $args = '' ) {
$defaults = array(
'show_updated' => 0,
'show_description' => 0,
'show_images' => 1,
'show_name' => 0,
'before' => '<li>',
'after' => '</li>',
'between' => "n",
'show_rating' => 0,
'link_before' => '',
'link_after' => '',
);
$parsed_args = wp_parse_args( $args, $defaults );
$output = ''; // Blank string to start with.
foreach ( (array) $bookmarks as $bookmark ) {
if ( ! isset( $bookmark->recently_updated ) ) {
$bookmark->recently_updated = false;
}
$output .= $parsed_args['before'];
if ( $parsed_args['show_updated'] && $bookmark->recently_updated ) {
$output .= '<em>';
}
$the_link = '#';
if ( ! empty( $bookmark->link_url ) ) {
$the_link = esc_url( $bookmark->link_url );
}
$desc = esc_attr( sanitize_bookmark_field( 'link_description', $bookmark->link_description, $bookmark->link_id, 'display' ) );
$name = esc_attr( sanitize_bookmark_field( 'link_name', $bookmark->link_name, $bookmark->link_id, 'display' ) );
$title = $desc;
if ( $parsed_args['show_updated'] ) {
if ( ! str_starts_with( $bookmark->link_updated_f, '00' ) ) {
$title .= ' (';
$title .= sprintf(
/* translators: %s: Date and time of last update. */
__( 'Last updated: %s' ),
gmdate(
get_option( 'links_updated_date_format' ),
$bookmark->link_updated_f + (int) ( (float) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS )
)
);
$title .= ')';
}
}
$alt = ' alt="' . $name . ( $parsed_args['show_description'] ? ' ' . $title : '' ) . '"';
if ( '' !== $title ) {
$title = ' title="' . $title . '"';
}
$rel = $bookmark->link_rel;
$target = $bookmark->link_target;
if ( '' !== $target ) {
$target = ' target="' . $target . '"';
}
if ( '' !== $rel ) {
$rel = ' rel="' . esc_attr( $rel ) . '"';
}
$output .= '<a href="' . $the_link . '"' . $rel . $title . $target . '>';
$output .= $parsed_args['link_before'];
if ( '' !== $bookmark->link_image && $parsed_args['show_images'] ) {
if ( str_starts_with( $bookmark->link_image, 'http' ) ) {
$output .= '<img src="' . $bookmark->link_image . '"' . $alt . $title . ' />';
} else { // If it's a relative path.
$output .= '<img src="' . get_option( 'siteurl' ) . $bookmark->link_image . '"' . $alt . $title . ' />';
}
if ( $parsed_args['show_name'] ) {
$output .= " $name";
}
} else {
$output .= $name;
}
$output .= $parsed_args['link_after'];
$output .= '</a>';
if ( $parsed_args['show_updated'] && $bookmark->recently_updated ) {
$output .= '</em>';
}
if ( $parsed_args['show_description'] && '' !== $desc ) {
$output .= $parsed_args['between'] . $desc;
}
if ( $parsed_args['show_rating'] ) {
$output .= $parsed_args['between'] . sanitize_bookmark_field(
'link_rating',
$bookmark->link_rating,
$bookmark->link_id,
'display'
);
}
$output .= $parsed_args['after'] . "n";
} // End while.
return $output;
}
Changelog
| Version | Description |
|---|---|
| 2.1.0 | Introduced. |