函数文档

get_bookmark()

💡 云策文档标注

概述

get_bookmark() 函数用于从 WordPress 数据库中检索书签(链接)数据,支持多种返回格式和过滤选项。它通过参数控制输出类型,并利用缓存机制优化性能。

关键要点

  • 函数签名:get_bookmark( $bookmark, $output = OBJECT, $filter = 'raw' )
  • 参数 $bookmark 可以是整数(书签 ID)或 stdClass 对象,必需;$output 可选,指定返回类型(OBJECT、ARRAY_A 或 ARRAY_N),默认 OBJECT;$filter 可选,控制字段清理方式,默认 'raw'
  • 返回类型取决于 $output 参数,可能为对象、数组或 null
  • 内部实现包括缓存检查(wp_cache_get/wp_cache_add)、数据库查询(wpdb::get_row)和清理(sanitize_bookmark)
  • 相关函数包括 wp_get_object_terms 用于获取关联分类,以及多个使用此函数的其他 WordPress 核心函数

代码示例

// 示例:获取书签并显示名称
$bookmark = get_bookmark( 1 ); // 假设 ID 为 1
if ( $bookmark ) {
    echo $bookmark->link_name;
}

// 示例:将书签作为链接输出
$bookmark = get_bookmark( 1 );
if ( $bookmark ) {
    echo '<a href="' . $bookmark->link_url . '">' . $bookmark->link_name . '</a>';
}

注意事项

  • 函数自 WordPress 2.1.0 版本引入,兼容性良好
  • 如果 $bookmark 为空且全局 $link 存在,则使用全局变量;否则返回 null
  • 输出类型需准确指定以避免数据类型错误,例如 ARRAY_A 返回关联数组,ARRAY_N 返回数值数组
  • 使用 $filter 参数可以控制数据清理级别,确保安全性

📄 原文内容

Retrieves bookmark data.

Parameters

$bookmarkint|stdClassrequired
$outputstringoptional
The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which correspond to an stdClass object, an associative array, or a numeric array, respectively.

Default:OBJECT

$filterstringoptional
How to sanitize bookmark fields. Default 'raw'.

Return

array|object|null Type returned depends on $output value.

Source

function get_bookmark( $bookmark, $output = OBJECT, $filter = 'raw' ) {
	global $wpdb;

	if ( empty( $bookmark ) ) {
		if ( isset( $GLOBALS['link'] ) ) {
			$_bookmark = & $GLOBALS['link'];
		} else {
			$_bookmark = null;
		}
	} elseif ( is_object( $bookmark ) ) {
		wp_cache_add( $bookmark->link_id, $bookmark, 'bookmark' );
		$_bookmark = $bookmark;
	} else {
		if ( isset( $GLOBALS['link'] ) && ( $GLOBALS['link']->link_id === $bookmark ) ) {
			$_bookmark = & $GLOBALS['link'];
		} else {
			$_bookmark = wp_cache_get( $bookmark, 'bookmark' );
			if ( ! $_bookmark ) {
				$_bookmark = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1", $bookmark ) );
				if ( $_bookmark ) {
					$_bookmark->link_category = array_unique( wp_get_object_terms( $_bookmark->link_id, 'link_category', array( 'fields' => 'ids' ) ) );
					wp_cache_add( $_bookmark->link_id, $_bookmark, 'bookmark' );
				}
			}
		}
	}

	if ( ! $_bookmark ) {
		return $_bookmark;
	}

	$_bookmark = sanitize_bookmark( $_bookmark, $filter );

	if ( OBJECT === $output ) {
		return $_bookmark;
	} elseif ( ARRAY_A === $output ) {
		return get_object_vars( $_bookmark );
	} elseif ( ARRAY_N === $output ) {
		return array_values( get_object_vars( $_bookmark ) );
	} else {
		return $_bookmark;
	}
}

Changelog

Version Description
2.1.0 Introduced.

User Contributed Notes