diff options
Diffstat (limited to 'wp-includes/plugin.php')
| -rw-r--r-- | wp-includes/plugin.php | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/wp-includes/plugin.php b/wp-includes/plugin.php index 266c271..1fe2c80 100644 --- a/wp-includes/plugin.php +++ b/wp-includes/plugin.php @@ -26,7 +26,9 @@ function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) function apply_filters($tag, $string) { global $wp_filter; - $args = array_slice(func_get_args(), 2); + $args = array(); + for ( $a = 2; $a < func_num_args(); $a++ ) + $args[] = func_get_arg($a); merge_filters($tag); @@ -37,18 +39,15 @@ function apply_filters($tag, $string) { if ( !is_null($functions) ) { foreach($functions as $function) { - $all_args = array_merge(array($string), $args); $function_name = $function['function']; $accepted_args = $function['accepted_args']; - if ( $accepted_args == 1 ) - $the_args = array($string); - elseif ( $accepted_args > 1 ) - $the_args = array_slice($all_args, 0, $accepted_args); + $the_args = $args; + array_unshift($the_args, $string); + if ( $accepted_args > 0 ) + $the_args = array_slice($the_args, 0, $accepted_args); elseif ( $accepted_args == 0 ) $the_args = NULL; - else - $the_args = $all_args; $string = call_user_func_array($function_name, $the_args); } @@ -102,11 +101,13 @@ function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) function do_action($tag, $arg = '') { global $wp_filter; - $extra_args = array_slice(func_get_args(), 2); - if ( is_array($arg) ) - $args = array_merge($arg, $extra_args); + $args = array(); + if ( is_array($arg) && 1 == count($arg) && is_object($arg[0]) ) // array(&$this) + $args[] =& $arg[0]; else - $args = array_merge(array($arg), $extra_args); + $args[] = $arg; + for ( $a = 2; $a < func_num_args(); $a++ ) + $args[] = func_get_arg($a); merge_filters($tag); @@ -120,18 +121,12 @@ function do_action($tag, $arg = '') { $function_name = $function['function']; $accepted_args = $function['accepted_args']; - if ( $accepted_args == 1 ) { - if ( is_array($arg) ) - $the_args = $arg; - else - $the_args = array($arg); - } elseif ( $accepted_args > 1 ) { + if ( $accepted_args > 0 ) $the_args = array_slice($args, 0, $accepted_args); - } elseif ( $accepted_args == 0 ) { + elseif ( $accepted_args == 0 ) $the_args = NULL; - } else { + else $the_args = $args; - } $string = call_user_func_array($function_name, $the_args); } |
