Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
@wordpress/hooks
Advanced tools
@wordpress/hooks is a library that provides a way to manage and trigger custom actions and filters in JavaScript. It is inspired by the WordPress PHP hooks system and allows developers to add, remove, and execute custom hooks in their JavaScript applications.
Adding Actions
This feature allows you to add custom actions that can be triggered at specific points in your application. The code sample demonstrates how to add an action named 'myCustomAction' in the 'myNamespace' namespace.
const { addAction } = require('@wordpress/hooks');
addAction('myCustomAction', 'myNamespace', () => {
console.log('Action triggered!');
});
Doing Actions
This feature allows you to trigger actions that have been added. The code sample demonstrates how to trigger the 'myCustomAction' action, which will execute any functions hooked to it.
const { doAction } = require('@wordpress/hooks');
doAction('myCustomAction');
Adding Filters
This feature allows you to add custom filters that can modify data at specific points in your application. The code sample demonstrates how to add a filter named 'myCustomFilter' in the 'myNamespace' namespace, which appends ' filtered' to the input value.
const { addFilter } = require('@wordpress/hooks');
addFilter('myCustomFilter', 'myNamespace', (value) => {
return value + ' filtered';
});
Applying Filters
This feature allows you to apply filters to data, modifying it according to the functions hooked to the filter. The code sample demonstrates how to apply the 'myCustomFilter' filter to the string 'original value', resulting in 'original value filtered'.
const { applyFilters } = require('@wordpress/hooks');
const result = applyFilters('myCustomFilter', 'original value');
console.log(result); // Outputs: 'original value filtered'
EventEmitter3 is a high-performance event emitter for Node.js and the browser. It provides a similar mechanism for managing events but does not include the concept of filters. It is more focused on emitting and listening to events.
Mitt is a tiny functional event emitter. It provides a simple API for emitting and listening to events, similar to the action functionality in @wordpress/hooks, but does not include filtering capabilities.
Hookable is a lightweight library for creating hooks in JavaScript. It provides a similar API for adding and triggering hooks, including both actions and filters, making it a closer alternative to @wordpress/hooks.
A lightweight & efficient EventManager for JavaScript.
Install the module
npm install @wordpress/hooks --save
This package assumes that your code will run in an ES2015+ environment. If you're using an environment that has limited or no support for ES2015+ such as IE browsers then using core-js will add polyfills for these methods.
In your JavaScript project, use hooks as follows:
import { createHooks } from '@wordpress/hooks';
myObject.hooks = createHooks();
myObject.hooks.addAction(); //etc...
In the above example, we are creating a custom instance of the Hooks
object and registering hooks there. The package also creates a default global instance that's accessible through the defaultHooks
named exports, and its methods are also separately exported one-by-one.
In the WordPress context, that enables API functions to be called via the global wp.hooks
object, like wp.hooks.addAction()
, etc.
One notable difference between the JS and PHP hooks API is that in the JS version, addAction()
and addFilter()
also need to include a namespace as the second argument. Namespace uniquely identifies a callback in the form vendor/plugin/function
.
createHooks()
addAction( 'hookName', 'namespace', callback, priority )
addFilter( 'hookName', 'namespace', callback, priority )
removeAction( 'hookName', 'namespace' )
removeFilter( 'hookName', 'namespace' )
removeAllActions( 'hookName' )
removeAllFilters( 'hookName' )
doAction( 'hookName', arg1, arg2, moreArgs, finalArg )
applyFilters( 'hookName', content, arg1, arg2, moreArgs, finalArg )
doingAction( 'hookName' )
doingFilter( 'hookName' )
didAction( 'hookName' )
didFilter( 'hookName' )
hasAction( 'hookName', 'namespace' )
hasFilter( 'hookName', 'namespace' )
actions
filters
defaultHooks
Whenever an action or filter is added or removed, a matching hookAdded
or hookRemoved
action is triggered.
hookAdded
action is triggered when addFilter()
or addAction()
method is called, passing values for hookName
, functionName
, callback
and priority
.hookRemoved
action is triggered when removeFilter()
or removeAction()
method is called, passing values for hookName
and functionName
.all
hookIn non-minified builds developers can register a filter or action that will be called on all hooks, for example: addAction( 'all', 'namespace', callbackFunction );
. Useful for debugging, the code supporting the all
hook is stripped from the production code for performance reasons.
FAQs
WordPress hooks library.
The npm package @wordpress/hooks receives a total of 112,208 weekly downloads. As such, @wordpress/hooks popularity was classified as popular.
We found that @wordpress/hooks demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 23 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.