WordPress Hooks Reference
All the actions and filters from WordPress core in machine-readable JSON format.
Last updated for WordPress 6.0.
Installation
Usage in PHP
$actions_json = file_get_contents( 'vendor/wp-hooks/wordpress-core/hooks/actions.json' );
$filters_json = file_get_contents( 'vendor/wp-hooks/wordpress-core/hooks/filters.json' );
$actions = json_decode( $actions_json, true )['hooks'];
$filters = json_decode( $filters_json, true )['hooks'];
$search = 'permalink';
$results = array_filter( $filters, function( array $hook ) use ( $search ) {
return ( false !== strpos( $hook['name'], $search ) );
} );
var_dump( $results );
Usage in JavaScript
const actions = require('@johnbillion/wp-hooks/hooks/actions.json').hooks;
const filters = require('@johnbillion/wp-hooks/hooks/filters.json').hooks;
const search = 'menu';
const results = actions.filter( hook => ( null !== hook.name.match( search ) ) );
console.log(results);
Importing in TypeScript
import { hooks as actions } from '@johnbillion/wp-hooks/hooks/actions.json';
import { hooks as filters } from '@johnbillion/wp-hooks/hooks/filters.json';
Interfaces for the components of the hooks can be imported too, if you need them:
import { Hooks, Hook, Doc, Tags, Tag } from '@johnbillion/wp-hooks/interface';
Actions, Filters, and Schemas
What can I use this for?
Anything that needs programmatic access to a list of available hooks, for example:
Regenerating the Hook Files
Change the roots/wordpress-full version in composer.json to the required WordPress version, or dev-nightly for nightly.
Install the dependencies:
npm i && composer i
Then run:
composer generate
Some scripts are available for checking the data:
- Check everything:
npm run check
- Find hooks with missing
@since tags:
jq '.hooks[] | . as $d | .doc .tags | map(.name) | select( contains(["since"]) | not ) | $d' hooks/filters.json
jq '.hooks[] | . as $d | .doc .tags | map(.name) | select( contains(["since"]) | not ) | $d' hooks/actions.json
- Find hooks with incorrect number of
@param tags (not completely accurate, not sure why):
jq '.hooks[] | select( .args == ( .doc.tags | map(.name) | select( contains(["param"]) ) | length ) ) | .name' hooks/filters.json
jq '.hooks[] | select( .args == ( .doc.tags | map(.name) | select( contains(["param"]) ) | length ) ) | .name' hooks/actions.json
Hook Files for Plugins
Do you want the same hook files for your favourite plugins? The hook files in this repo are generated using wp-hooks-generator. It can generate hook files for WordPress plugins and themes as well as core.
The time that I spend maintaining this library and others is in part sponsored by:

Plus all my kind sponsors on GitHub:

Click here to find out about supporting this library and my other WordPress development tools and plugins.