Plugin Hooks & Filters

Core Filters

add_filter( 'filter_name', 'function_to_call' );
  • content Will allow you to alter or filter the $content variable. The function that you pass $content to should then return your results back to the system.
  • menuitems Will allow you to alter or filter the main navigation that is shown with the get_navigation template tag. The function that you pass $menu to should then return your results back to the system.
Filter ID Description arg type Support
content filters page content data string
menuitems filters the menu html returned in get_navigation() string
pagecache filters the page cache xml object before saving simplexmlobj 3.3+
sitemap filters the $sitemap xmlobj before saving simplexmlobj 3.3+
indexid filters global page $id string 3.3+
data_index filters global page $data_index obj simplexmlobj 3.3+
editorlinksfilters editor links get_link_menu_array array 3.3+

Core Hooks

add_action( 'hook_name', 'function_to_call', array( arguments ) );

The last argument is only necessary if function_to_call accepts parameters.

hook_name can be any of these and determines where the function will be called.

DEPRECATED
NEW

Front-End Hooks

Hook ID Description Support
theme-header Fired in <head> section of theme. Requires get_header() in template
theme-footer Fired in the footer of the theme. Requires get_footer() in template
common Called immediately after the plugin functions are included in common.php 3.1+
content-top Fired right above content area of theme
content-bottom Fired right below content area of theme
index-pretemplate Called before your template files are rendered
index-posttemplate Called after your template files are rendered
error-404 Called if the page does not exist before rendering the error page
index-post-dataindex Called after the page globals are assigned from $data_index 3.3+

Back-End Hooks

Hook ID Description Support
admin-pre-header Called before the header.php template file is loaded 3.1+
archive-backup Fired when an archive backup has been created
caching-save Fired before data/other/pages.xml file is saved for caching 3.1-3.3
changedata-aftersave Called after a page is saved 3.1+
changedata-updateslug Called when slug changed on an existing page
changedata-save Called just before a page is saved
common Called immediately after the plugin functions are included in common.php 3.1+
component-extras Fired when creating component sections, allows additional form elements
edit-extras Fired within the Page Options toggle-div within edit.php
file-extras Fired at the end of the file list
file-uploaded Fired after a file has been successfully uploaded
footer Called in the footer section of the rendered page
download-file Called when downloading files via download.php
header Called in the head section of the rendered page
header-body Called in the body before output of the page
healthcheck-extras Allows additional Health-check entries
html-editor-init Called after ckeditor js is output
index-login Fired above the login form
logfile_delete fired when a logfile is deleted
login-reqs Fired on the login page footer
logout Fired when a user logs out
page-delete fired when a page is deleted
pagecache-aftersave Fired after data/other/pages.xml pagecache file is successfully saved 3.3+
pages-main Fired when the pages maincontent in rendered
plugin-hook Fired before the Plugin page is rendered
resetpw-error Fired when password reset and error
resetpw-success Fired when password reset and successful
save-sitemap Fired before the sitemap.xml file is saved -3.1
settings-cpsettings Fired before the settings cp_settings file is created 2.x-3.0
settings-user Fired before the settings user file is created
settings-user-extras Fired on the settings page, before Save Settings in the user section
settings-website Fired before the settings website page is created
settings-website-extras Fired on the settings page, before Save Settings in the website section
sitemap-additem Allow insertion of a new sitemap XML entry -3.1
sitemap-aftersave Called after the sitemap is successfully saved 3.3+
successful-login-end Fired after authentication success and before redirect
successful-login-start Fired when before login authentication starts
support-extras Allows additional support setting form entries
support-save Fired before cp_settings.xml file is created -3.0
theme-edit-extras Fired in the theme edit screen before the submit button
theme-extras Fired after the theme screenshot
welcome-doc-link Allows additional documentation links on the Welcome page
welcome-link Allows additional links on the Welcome page

The following actions allow the customization of the administration menu and are described on Tabs and Menus:

  • backups-sidebar, files-sidebar, pages-sidebar, plugins-sidebar, settings-sidebar, support-sidebar, theme-sidebar Allows additional sidebar menu items
  • nav-tab Allow insertion of a new tabbed entry in the navigation bar

Back-End GUI

Hook ID Description Support
backups-sidebar Sidebar item on Backups Page
files-sidebar Sidebar item on Files Page
pages-sidebar Sidebar item on Pages Page
plugins-sidebar Sidebar item on Plugins Page
settings-sidebar Sidebar item on Settings Page
support-sidebar Sidebar item on Support Page
theme-sidebar Sidebar item on Theme Page
nav-tab Insert navigation bar tab

Creating and Using Plugin Hooks/Filters

Similar to core hooks and filters, plugins can create their own by using the functions exec_action and exec_filter.

exec_action( 'hook_name' );
exec_filter( 'filter_name', 'value_to_filter' );

If your plugin uses a GS hook to alter content before it is saved (e.g, the MultiUser plugin changes the output to the user.xml file and makes all changes from other plugins in this hook undone), it is especially important to add a custom hook, so that other plugin developers can make their plugins compatible with yours if they need to alter the data too.

If you created a plugin hook called 'your-plugin-hook', as described in the paragraph above, other plugin developers could then:

  1. (1) detect whether your plugin is active by using pluginIsActive('your-plugin-name') (GS 3.3.4+) or by checking for existence of your init function/a constant you defined, and
  2. (2) use your hook with add_action('your-plugin-hook', 'their-function').

This is an important step to take in making multiple plugins from different authors compatible with one another.

When naming hooks in your plugins be sure to use a unique name to not step on core hook ids.