Ticket #3116: 3116c.diff

File 3116c.diff, 2.2 kB (added by mdawaffe, 2 years ago)
  • wp-includes/plugin.php

    old new  
    2626function apply_filters($tag, $string) { 
    2727        global $wp_filter; 
    2828 
    29         $args = array_slice(func_get_args(), 2); 
     29        $args = array($string); 
     30        for ( $a = 2; $a < func_num_args(); $a++ ) 
     31                $args[] = func_get_arg($a); 
    3032 
    3133        merge_filters($tag); 
    3234 
     
    3739                if ( !is_null($functions) ) { 
    3840                        foreach($functions as $function) { 
    3941 
    40                                 $all_args = array_merge(array($string), $args); 
    4142                                $function_name = $function['function']; 
    4243                                $accepted_args = $function['accepted_args']; 
    4344 
    44                                 if ( $accepted_args == 1 ) 
    45                                         $the_args = array($string); 
    46                                 elseif ( $accepted_args > 1 ) 
    47                                         $the_args = array_slice($all_args, 0, $accepted_args); 
     45                                if ( $accepted_args > 0 ) 
     46                                        $the_args = array_slice($args, 0, $accepted_args); 
    4847                                elseif ( $accepted_args == 0 ) 
    4948                                        $the_args = NULL; 
    5049                                else 
    51                                         $the_args = $all_args; 
     50                                        $the_args = $args; 
    5251 
    5352                                $string = call_user_func_array($function_name, $the_args); 
    5453                        } 
     
    102101 
    103102function do_action($tag, $arg = '') { 
    104103        global $wp_filter; 
    105         $extra_args = array_slice(func_get_args(), 2); 
    106        if ( is_array($arg)
    107                $args = array_merge($arg, $extra_args)
     104        $args = array(); 
     105       if ( is_array($arg) && 1 == count($arg) && is_object($arg[0]) ) // array(&$this
     106               $args[] =& $arg[0]
    108107        else 
    109                 $args = array_merge(array($arg), $extra_args); 
     108                $args[] = $arg; 
     109        for ( $a = 2; $a < func_num_args(); $a++ ) 
     110                $args[] = func_get_arg($a); 
    110111 
    111112        merge_filters($tag); 
    112113 
     
    120121                                $function_name = $function['function']; 
    121122                                $accepted_args = $function['accepted_args']; 
    122123 
    123                                 if ( $accepted_args == 1 ) { 
    124                                         if ( is_array($arg) ) 
    125                                                 $the_args = $arg; 
    126                                         else 
    127                                                 $the_args = array($arg); 
    128                                 } elseif ( $accepted_args > 1 ) { 
     124                                if ( $accepted_args > 0 ) 
    129125                                        $the_args = array_slice($args, 0, $accepted_args); 
    130                                 } elseif ( $accepted_args == 0 ) { 
     126                                elseif ( $accepted_args == 0 ) 
    131127                                        $the_args = NULL; 
    132                                 } else { 
     128                                else 
    133129                                        $the_args = $args; 
    134                                 } 
    135130 
    136131                                $string = call_user_func_array($function_name, $the_args); 
    137132                        }