构建用于存储和检索的唯一ID。

原型

_wp_filter_build_unique_id( string $tag, callable $function, int|bool $priority )

描述

序列化回调的旧方法导致问题,此功能是解决方案。它的工作原理是检查对象并在类中创建一个新属性,以跟踪需要添加的同一类的对象和新对象。

参数

$tag (string) (Required) 用于计算应用了多少个挂钩

$function (callable) (Required) 用于创建唯一ID

$priority (int|bool) (Required) 用于计算应用了多少个挂钩。如果=== false和$ function是对象引用,我们只返回唯一ID,否则返回false。

返回值

(string|false)  用作数组键的唯一ID,如果$ priority === false且$ function是对象引用,则为false,并且它不具有唯一ID。

源文件

路径:wp-includes/plugin.php

<?php
...
function _wp_filter_build_unique_id($tag, $function, $priority) {
	global $wp_filter;
	static $filter_id_count = 0;
	if ( is_string($function) )
		return $function;
	if ( is_object($function) ) {
		// Closures are currently implemented as objects
		$function = array( $function, '' );
	} else {
		$function = (array) $function;
	}
	if (is_object($function[0]) ) {
		// Object Class Calling
		if ( function_exists('spl_object_hash') ) {
			return spl_object_hash($function[0]) . $function[1];
		} else {
			$obj_idx = get_class($function[0]).$function[1];
			if ( !isset($function[0]->wp_filter_id) ) {
				if ( false === $priority )
					return false;
				$obj_idx .= isset($wp_filter[$tag][$priority]) ? count((array)$wp_filter[$tag][$priority]) : $filter_id_count;
				$function[0]->wp_filter_id = $filter_id_count;
				++$filter_id_count;
			} else {
				$obj_idx .= $function[0]->wp_filter_id;
			}
			return $obj_idx;
		}
	} elseif ( is_string( $function[0] ) ) {
		// Static Calling
		return $function[0] . '::' . $function[1];
	}
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/_wp_filter_build_unique_id/