WordPress.org

Make WordPress Core

Ticket #3875: plugin.diff.php

File plugin.diff.php, 2.0 KB (added by darkdragon, 13 years ago)

Optimized patch to decrease time by one half with twice as much

Line 
1Index: plugin.php
2===================================================================
3--- plugin.php  (revision 5875)
4+++ plugin.php  (working copy)
5@@ -19,7 +19,9 @@
6        global $wp_filter, $merged_filters;
7 
8        // So the format is wp_filter['tag']['array of priorities']['array of functions serialized']['array of ['array (functions, accepted_args)]']
9-       $wp_filter[$tag][$priority][serialize($function_to_add)] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
10+       $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
11+    $wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
12+       //$wp_filter[$tag][$priority][serialize($function_to_add)] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
13        unset( $merged_filters[ $tag ] );
14        return true;
15 }
16@@ -97,7 +99,7 @@
17  * @return boolean Whether the function is removed.
18  */
19 function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) {
20-       $function_to_remove = serialize($function_to_remove);
21+       $function_to_remove = _wp_filter_build_unique_id($tag, $function_to_remove, $priority);
22 
23        $r = isset($GLOBALS['wp_filter'][$tag][$priority][$function_to_remove]);
24 
25@@ -280,4 +282,29 @@
26        add_action('deactivate_' . $file, $function);
27 }
28 
29+function _wp_filter_build_unique_id($tag, $function, $priority = 10)
30+{
31+       global $wp_filter;
32+       
33+       // If function then just skip all of the tests and not overwrite the following.
34+       // Static Calling
35+       if( is_string($function) )
36+               return $function;
37+       // Object Class Calling
38+       else if(is_object($function[0]) )
39+       {
40+               $obj_idx = get_class($function[0]).$function[1];
41+               if( is_null($function[0]->wp_filter_id) ) {
42+                       $count = count((array)$wp_filter[$tag][$priority]);
43+                       $function[0]->wp_filter_id = $count;
44+                       $obj_idx .= $count;
45+                       unset($count);
46+               } else
47+                       $obj_idx .= $function[0]->wp_filter_id;
48+               return $obj_idx;
49+       }
50+       else if( is_string($function[0]) )
51+               return $function[0].$function[1];
52+}
53+
54 ?>