Alert: This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

_wp_filter_build_unique_id() WordPress Function

The _wp_filter_build_unique_id() function is used to build a unique ID for a given filter. This is useful for ensuring that a filter is only applied once, even if it is added multiple times.

_wp_filter_build_unique_id( string $hook_name, callable|string|array $callback, int $priority ) #

Builds Unique ID for storage and retrieval.


Description

The old way to serialize the callback caused issues and this function is the solution. It works by checking for objects and creating a new property in the class to keep track of the object and new objects of the same class that need to be added.

It also allows for the removal of actions and filters for objects after they change class properties. It is possible to include the property $wp_filter_id in your class and set it to "null" or a number to bypass the workaround. However this will prevent you from adding new classes and any new classes will overwrite the previous hook by the same class.

Functions and static method callbacks are just returned as strings and shouldn’t have any speed penalty.


Top ↑

Parameters

$hook_name

(string)(Required)Unused. The name of the filter to build ID for.

$callback

(callable|string|array)(Required)The callback to generate ID for. The callback may or may not exist.

$priority

(int)(Required)Unused. The order in which the functions associated with a particular action are executed.


Top ↑

Return

(string) Unique function ID for usage as array key.


Top ↑

Source

File: wp-includes/plugin.php

function _wp_filter_build_unique_id( $hook_name, $callback, $priority ) {
	if ( is_string( $callback ) ) {
		return $callback;
	}

	if ( is_object( $callback ) ) {
		// Closures are currently implemented as objects.
		$callback = array( $callback, '' );
	} else {
		$callback = (array) $callback;
	}

	if ( is_object( $callback[0] ) ) {
		// Object class calling.
		return spl_object_hash( $callback[0] ) . $callback[1];
	} elseif ( is_string( $callback[0] ) ) {
		// Static calling.
		return $callback[0] . '::' . $callback[1];
	}
}


Top ↑

Changelog

Changelog
VersionDescription
5.3.0Removed workarounds for spl_object_hash(). $hook_name and $priority are no longer used, and the function always returns a string.
2.2.3Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by theĀ Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.