From 42eb1ba7ca9e956297f04b43114c8dbb7607a193 Mon Sep 17 00:00:00 2001 From: westi Date: Thu, 22 Oct 2009 19:33:11 +0000 Subject: [PATCH] Improve _wp_filter_build_unique_id to give more consistent behaviour and make filter removal reliable for class based filters. Fixes #10535 props dd32. git-svn-id: http://svn.automattic.com/wordpress/trunk@12090 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/plugin.php | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/wp-includes/plugin.php b/wp-includes/plugin.php index a1c7fcf72..29134ac47 100644 --- a/wp-includes/plugin.php +++ b/wp-includes/plugin.php @@ -675,24 +675,30 @@ function _wp_filter_build_unique_id($tag, $function, $priority) { global $wp_filter; static $filter_id_count = 0; - // If function then just skip all of the tests and not overwrite the following. - if ( is_string($function) ) + if ( is_string($function) ) { return $function; - // Object Class Calling - else if (is_object($function[0]) ) { - $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]) : 0; - $function[0]->wp_filter_id = $filter_id_count++; - } else - $obj_idx .= $function[0]->wp_filter_id; - return $obj_idx; - } - // Static Calling - else if ( is_string($function[0]) ) + } else 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; + } + } else if ( is_string($function[0]) ) { + // Static Calling return $function[0].$function[1]; + } } ?>