The do_action() WordPress PHP function is used to call the callback functions that have been added to an action hook.
Usage
To use do_action(), you create a new action hook and specify the name of the new hook using the $hook_name
parameter. You can also pass extra arguments to the hooks. Below is a generic usage example:
// The action callback function. function example_callback( $arg1, $arg2 ) { // (maybe) do something with the args. } add_action( 'example_action', 'example_callback', 10, 2 ); // Trigger the actions by calling the 'example_callback()' function // that's hooked onto `example_action` above. do_action( 'example_action', $arg1, $arg2 );
Parameters
$hook_name
(string, required) – The name of the action to be executed.$arg
(mixed, optional) – Additional arguments which are passed on to the functions hooked to the action. Default is empty.
More information
See WordPress Developer Resources: do_action()
Related functions include add_action()
and remove_action()
.
Examples
Display Data
In this example, we’ll hook a function that displays some data when the action is called.
function display_data( $text ) { echo $text; } add_action( 'show_text', 'display_data', 10, 1 ); do_action( 'show_text', 'Hello, World!' ); // Outputs: Hello, World!
User Registration
In this scenario, we’ll use do_action()
to hook into the user registration process.
function new_user_registered( $user_id ) { // Send notification, log activity, etc. } add_action( 'user_register', 'new_user_registered', 10, 1 ); // This is typically called when a new user is registered. do_action( 'user_register', $new_user_id );
Modify Post Content
This example shows how to use do_action()
to modify post content.
function modify_content( $content ) { return $content . ' Thank you for reading!'; } add_action( 'the_content', 'modify_content' ); // This is usually hooked into WordPress' loop. do_action( 'the_content', $post->post_content );
Custom Action Hook
You can create a custom action hook. Suppose we want to create a custom hook called ‘my_custom_hook’ and work with it.
do_action( 'my_custom_hook' ); function wporg_my_custom_hook_function() { echo "This is a custom hook!"; } add_action( 'my_custom_hook', 'wporg_my_custom_hook_function' );
Warning about Arrays
When calling do_action()
, if the $arg
you pass in is an array with a single object, it will instead pass that object in and NOT an array.
function my_callback( $should_be_an_array ){ var_dump($should_be_an_array); } add_action( 'my_action', 'my_callback' ); do_action( 'my_action', array(new stdclass()) ); do_action( 'my_action', array( 'array_item_thats_not_an_object') );
Notice that the first time we passed in an array with an stdClass in it, but the callback function only received the stdClass, NOT an array.