$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
is closed that contains the post content textarea. Useful for inserting additional input fields into the advanced editing form. edit_page_form No parameter. Executes inside the
tag on the page editing form. Useful for inserting additional input fields in the page editing form. edit_post Receives the post ID as a parameter. Executes every time a post is edited. generate_rewrite_rules No parameter. Executes whenever the rewrite rules are recomputed. To modify the computed rules, use the filter rewrite_rules_array instead. init Executes after WordPress has finished loading but before any headers are sent. Useful for intercepting $_GET or $_POST triggers. pingback_post Receives the comment ID as a parameter. Executes when a comment is added via XMLRPC. private_to_published Receives the post ID as a parameter. Executes when a post is moved from private to published status. publish_phone Receives the post ID as a parameter. Executes when a post is added via wp-mail.php. publish_post Receives the post ID as a parameter. Executes when a post is saved and its status is set to "publish", regardless of its prior setting. NOTE: to add a hook to this action in 1.2, be sure to specify a priority between 0 and 9. The generic_ping hook is buggy and prevents any lesser priority hooks from working. save_post Receives the post ID as a parameter. Executes when a post is saved to the database. shutdown No parameter. Executes when the page output is complete. simple_edit_form No parameter. Executes during the display of the admin panel's simple editing page, just before the
is closed that contains the post content textarea. Useful for inserting additional input fields into the simple editing form. switch_theme Receives the name of the current theme as a parameter. Executes when the blog theme is changed. template_redirect No parameter. Executes before the determination of the template file to be used to display the requested page. Useful for providing additional templates based on request criteria. Example (pedagogical, not useful): Redirect all requests to the all.php template file in the current themes' directory. function all_on_one () { include(TEMPLATEPATH . '/all.php'); exit; } add_action('template_redirect', 'all_on_one'); trackback_post Receives the comment ID as a parameter. Executes when a comment is added via trackback.php. wp_footer No parameter. Template tag. Executes at the end of the tag. Useful for insertion of additional content. wp_head No parameter. Executes in the section. Useful for insertion of additional content. wp_meta No parameter. Executes in the
  • Meta
  • section of the included Theme's sidebar.php's. Useful for insertion of additional content. wp_set_comment_status Receives the comment ID as a parameter. Executes when the comment status changes. */ ?>