/** * Execute functions hooked on a specific action hook, specifying arguments in an array. * * @see do_action() This function is identical, but the arguments passed to the * functions hooked to <tt>$tag</tt> are supplied using an array. * * this function was stolen from WordPress * * @param string $tag The name of the action to be executed. * @param array $args The arguments supplied to the functions hooked to <tt>$tag</tt> * @return null Will return null if $tag does not exist in $wp_filter array */ public static function do_action_ref_array($tag, $args) { if (!is_array(self::$actions)) { self::$actions = array($tag); } else { self::$actions[] = $tag; } self::$current_filter[] = $tag; /** * exclude all actions until we need them // Do 'all' actions first if ( isset(self::$filter['all']) ) { $all_args = func_get_args(); _call_all_hook($all_args); } */ if (!isset(self::$filter[$tag])) { array_pop(self::$current_filter); return; } // Sort if (!isset(self::$merged_filters[$tag])) { ksort(self::$filter[$tag]); self::$merged_filters[$tag] = true; } reset(self::$filter[$tag]); do { foreach ((array) current(self::$filter[$tag]) as $the_) { if (!is_null($the_['function'])) { call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } } } while (next(self::$filter[$tag]) !== false); array_pop(self::$current_filter); }