函数文档

_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_updated int|bool
    Whether to show the time the bookmark was last updated.
    Accepts 1|true or 0|false. Default 0|false.
  • show_description int|bool
    Whether to show the bookmark description. Accepts 1|true, Accepts 1|true or 0|false. Default 0|false.
  • show_images int|bool
    Whether to show the link image if available. Accepts 1|true or 0|false. Default 1|true.
  • show_name int|bool
    Whether to show link name if available. Accepts 1|true or 0|false. Default 0|false.
  • before string
    The HTML or text to prepend to each bookmark. Default <li>.
  • after string
    The HTML or text to append to each bookmark. Default </li>.
  • link_before string
    The HTML or text to prepend to each bookmark inside the anchor tags. Default empty.
  • link_after string
    The HTML or text to append to each bookmark inside the anchor tags. Default empty.
  • between string
    The string for use in between the link, description, and image.
    Default “n”.
  • show_rating int|bool
    Whether to show the link rating. Accepts 1|true or 0|false.
    Default 0|false.

Return

string Formatted output in HTML

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.