$functions) { if (isset($wp_filter[$tag][$priority])) $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], $wp_filter[$tag][$priority]); else $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], array()); $wp_filter[$tag][$priority] = array_unique($wp_filter[$tag][$priority]); } } if ( isset($wp_filter[$tag]) ) ksort( $wp_filter[$tag] ); } function apply_filters($tag, $string) { global $wp_filter; $args = array_slice(func_get_args(), 2); merge_filters($tag); if (!isset($wp_filter[$tag])) { return $string; } foreach ($wp_filter[$tag] as $priority => $functions) { 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); } elseif($accepted_args == 0) { $the_args = NULL; } else { $the_args = $all_args; } $string = call_user_func_array($function_name, $the_args); } } } return $string; } function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter; // check that we don't already have the same filter at the same priority if (isset($wp_filter[$tag]["$priority"])) { foreach($wp_filter[$tag]["$priority"] as $filter) { // uncomment if we want to match function AND accepted_args //if ($filter == array($function, $accepted_args)) { if ($filter['function'] == $function_to_add) { return true; } } } // So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]'] $wp_filter[$tag]["$priority"][] = array('function'=>$function_to_add, 'accepted_args'=>$accepted_args); //added by NoWhereMan ksort($wp_filter[$tag]["$priority"]); return true; } function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { global $wp_filter; $new_function_list = array(); // rebuild the list of filters if (isset($wp_filter[$tag]["$priority"])) { foreach($wp_filter[$tag]["$priority"] as $filter) { if ($filter['function'] != $function_to_remove) { $new_function_list[] = $filter; } } $wp_filter[$tag]["$priority"] = $new_function_list; } return true; } // The *_action functions are just aliases for the *_filter functions, they take special strings instead of generic content 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); else $args = array_merge(array($arg), $extra_args); merge_filters($tag); if (!isset($wp_filter[$tag])) { return; } foreach ($wp_filter[$tag] as $priority => $functions) { if (!is_null($functions)) { foreach($functions as $function) { $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) { $the_args = array_slice($args, 0, $accepted_args); } elseif($accepted_args == 0) { $the_args = NULL; } else { $the_args = $args; } $string = call_user_func_array($function_name, $the_args); } } } } function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { add_filter($tag, $function_to_add, $priority, $accepted_args); } function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { remove_filter($tag, $function_to_remove, $priority, $accepted_args); } //---------------------------------------------------------------------------- // WordPress hooks //---------------------------------------------------------------------------- /* Current Hooks For Actions This is a comprehensive list of plugin hooks in the core distribution of WordPress as of version 1.5 beta 1. NOTE: the following list is not a comprehensive listing of hooks available in 1.5 final. See Skippy's list (http://codex.wordpress.org/User:Skippy) for a more comprehensive, if less descriptive, listing of actions and filters. admin_footer No parameter. Executes at the end of the admin panel inside the body tag. Useful for insertion of additional content. admin_head No parameter. Executes in the
section of the admin panel. Useful for insertion of additional content. admin_menu No parameter. Executes after the basic admin panel menu structure is in place. Useful for adding additional menus to the admin panel. comment_closed Receives the comment's post ID as a parameter. Executes when attempting to display the comment form for a post that has closed comments. comment_form Receives the comment's post ID as a parameter. Template tag. Executes after displaying the comment form for a post that allows comments. comment_id_not_found Receives the comment's post ID as a parameter. Executes when attempting to display the comment form for a post that does not exist. comment_post Receives the comment ID as a parameter. Executes when a comment is added through wp-comments.php. delete_comment Receives the comment ID as a parameter. Executes when a comment is deleted. delete_post Receives the post ID as a parameter. Executes whenever a post is deleted. edit_comment Receives the comment ID as a parameter. Executes whenever a comment is edited. edit_form_advanced No parameter. Executes during the display of the admin panel's advanced editing page, just before the