summaryrefslogtreecommitdiffstats
path: root/wp-includes/plugin.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/plugin.php')
-rw-r--r--wp-includes/plugin.php37
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);
}