WordPress Version: 6.1
/**
* Bookmark Template Functions for usage in Themes.
*
* @package WordPress
* @subpackage Template
*/
/**
* The formatted output of a list of bookmarks.
*
* 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.
*
* @since 2.1.0
* @access private
*
* @param array $bookmarks List of bookmarks to traverse.
* @param string|array $args {
* Optional. Bookmarks arguments.
*
* @type int|bool $show_updated Whether to show the time the bookmark was last updated.
* Accepts 1|true or 0|false. Default 0|false.
* @type int|bool $show_description Whether to show the bookmark description. Accepts 1|true,
* Accepts 1|true or 0|false. Default 0|false.
* @type int|bool $show_images Whether to show the link image if available. Accepts 1|true
* or 0|false. Default 1|true.
* @type int|bool $show_name Whether to show link name if available. Accepts 1|true or
* 0|false. Default 0|false.
* @type string $before The HTML or text to prepend to each bookmark. Default `<li>`.
* @type string $after The HTML or text to append to each bookmark. Default `</li>`.
* @type string $link_before The HTML or text to prepend to each bookmark inside the anchor
* tags. Default empty.
* @type string $link_after The HTML or text to append to each bookmark inside the anchor
* tags. Default empty.
* @type string $between The string for use in between the link, description, and image.
* Default "\n".
* @type int|bool $show_rating Whether to show the link rating. Accepts 1|true or 0|false.
* Default 0|false.
*
* }
* @return string Formatted output in HTML
*/
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 ('00' !== substr($bookmark->link_updated_f, 0, 2)) {
$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 + 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) {
if (is_string($rel) && '' !== $rel) {
if (!str_contains($rel, 'noopener')) {
$rel = trim($rel) . ' noopener';
}
} else {
$rel = 'noopener';
}
$target = ' target="' . $target . '"';
}
if ('' !== $rel) {
$rel = ' rel="' . esc_attr($rel) . '"';
}
$output .= '<a href="' . $the_link . '"' . $rel . $title . $target . '>';
$output .= $parsed_args['link_before'];
if (null != $bookmark->link_image && $parsed_args['show_images']) {
if (strpos($bookmark->link_image, 'http') === 0) {
$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;
}