Bird
Raised Fist0
Wordpressframework~10 mins

add_action and add_filter in Wordpress - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - add_action and add_filter
WordPress loads core
↓
Hooks registered with add_action/add_filter
↓
WordPress runs event or filter point
↓
Check for hooked functions
↓
No
↓
Skip
↓
If filter, modify data and return
↓
Continue WordPress execution
WordPress loads and registers hooks with add_action or add_filter. When an event or filter point runs, WordPress checks for hooked functions and runs them in order. Filters modify data and return it.
Execution Sample
Wordpress
<?php
add_action('init', 'say_hello');
function say_hello() {
  echo 'Hello!';
}
?>
This code hooks the say_hello function to the 'init' action, so 'Hello!' prints when WordPress initializes.
Execution Table
StepHook PointHooked FunctionAction TakenOutput/Result
1WordPress loadsadd_action('init', 'say_hello')Registers say_hello to 'init'No output yet
2WordPress reaches 'init' actionsay_helloRuns say_hello functionPrints 'Hello!'
3No more hooked functionsN/AContinue normal WordPress flowNormal page loads
💡 All hooked functions for 'init' run; WordPress continues normal execution
Variable Tracker
VariableStartAfter Step 1After Step 2Final
hook_registry['init']empty['say_hello']['say_hello']['say_hello']
output_bufferemptyempty'Hello!''Hello!'
Key Moments - 2 Insights
Why doesn't 'Hello!' print immediately after add_action is called?
Because add_action only registers the function to run later at the 'init' hook point. The function runs only when WordPress reaches that hook (see execution_table step 2).
What is the difference between add_action and add_filter?
add_action runs functions at specific points without changing data, while add_filter runs functions that receive data, modify it, and return it. Filters change data flow; actions do not (see concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output after step 2?
AError message
BNo output
C'Hello!'
D'init'
💡 Hint
Check the 'Output/Result' column at step 2 in the execution_table
At which step does WordPress run the hooked function?
AStep 2
BStep 1
CStep 3
DNever
💡 Hint
Look at the 'Action Taken' column to see when the function runs
If you use add_filter instead of add_action, what changes?
AThe function runs earlier
BThe hooked function can modify and return data
CThe function runs multiple times automatically
DNothing changes
💡 Hint
Refer to the concept_flow description about filters modifying data
Concept Snapshot
add_action('hook_name', 'function_name')
- Registers a function to run at a WordPress event
- Function runs when WordPress reaches that hook

add_filter('hook_name', 'function_name')
- Registers a function to modify data
- Function receives data, returns modified data

Hooks run in order of registration
Functions hooked do not run immediately
Full Transcript
In WordPress, add_action and add_filter let you connect your functions to specific points called hooks. add_action runs your function when WordPress hits an event, like 'init'. add_filter runs your function to change data passed through a filter. The process starts with WordPress loading and registering your hooks. When WordPress reaches the hook point, it runs all functions registered there. Actions run functions without changing data, filters run functions that receive and return data. For example, add_action('init', 'say_hello') registers say_hello to run at 'init'. When WordPress runs 'init', it calls say_hello, which prints 'Hello!'. This happens after registration, not immediately. Understanding when and how your hooked functions run helps you customize WordPress behavior safely and effectively.

Practice

(1/5)
1. What is the main purpose of add_action in WordPress?
easy
A. To create new user roles
B. To change the content of posts before display
C. To register new database tables
D. To run custom code at specific WordPress events

Solution

  1. Step 1: Understand what add_action does

    add_action hooks your custom function to WordPress events so it runs at the right time.
  2. Step 2: Compare with other options

    Changing content before display is for filters, not actions. Registering tables or roles is unrelated to add_action.
  3. Final Answer:

    To run custom code at specific WordPress events -> Option D
  4. Quick Check:

    add_action runs code on events = D [OK]
Hint: Actions run code at events; filters change data [OK]
Common Mistakes:
  • Confusing add_action with add_filter
  • Thinking add_action changes data directly
  • Assuming add_action registers database or roles
2. Which of the following is the correct syntax to add a filter in WordPress?
easy
A. add_filter(my_function, 'the_content');
B. add_action('the_content', 'my_function');
C. add_filter('the_content', 'my_function');
D. add_action(my_function, 'the_content');

Solution

  1. Step 1: Recall the correct order of parameters for add_filter

    The first parameter is the filter hook name as a string, the second is the callback function name.
  2. Step 2: Check each option's parameter order and function used

    add_filter('the_content', 'my_function'); uses add_filter with correct parameter order. Options B and D use add_action incorrectly. add_filter(my_function, 'the_content'); reverses parameters.
  3. Final Answer:

    add_filter('the_content', 'my_function'); -> Option C
  4. Quick Check:

    Filter syntax: add_filter(hook, function) = A [OK]
Hint: Filter syntax: hook name first, function second [OK]
Common Mistakes:
  • Swapping parameters order
  • Using add_action instead of add_filter
  • Passing function name before hook name
3. Given this code snippet:
function change_title($title) {
  return 'Hello: ' . $title;
}
add_filter('the_title', 'change_title');

What will be the output of the_title() for a post titled "World"?
medium
A. Hello: World
B. the_title
C. World
D. Hello World

Solution

  1. Step 1: Understand the filter function

    The function change_title adds "Hello: " before the original title.
  2. Step 2: Apply the filter to the post title

    When the_title() runs, WordPress applies the filter, so "World" becomes "Hello: World".
  3. Final Answer:

    Hello: World -> Option A
  4. Quick Check:

    Filter prepends 'Hello: ' to title = C [OK]
Hint: Filters modify data output; here title gets prefix [OK]
Common Mistakes:
  • Ignoring the filter effect on output
  • Confusing add_action with add_filter effect
  • Missing the colon and space after Hello
4. What is wrong with this code?
add_filter('the_content', 'modify_content');
function modify_content() {
  return 'Modified content';
}
medium
A. The hook name is incorrect
B. The callback function must accept the content parameter
C. add_filter should be add_action here
D. The function must echo content, not return

Solution

  1. Step 1: Check the callback function signature

    Filter callbacks must accept the original data as a parameter to modify it.
  2. Step 2: Identify the missing parameter

    The function modify_content has no parameters, so it cannot receive the content to change.
  3. Final Answer:

    The callback function must accept the content parameter -> Option B
  4. Quick Check:

    Filter callbacks need input parameter = B [OK]
Hint: Filter functions must accept and return data [OK]
Common Mistakes:
  • Omitting the parameter in filter callback
  • Using add_action instead of add_filter
  • Trying to echo instead of return in filter
5. You want to add a custom message after every post content but only for logged-in users. Which is the best way to do this using add_filter?
hard
A. Use add_filter('the_content', 'add_message'); and inside add_message check if user is logged in before appending message
B. Use add_action('the_content', 'add_message'); and append message without checking user
C. Use add_filter('the_content', 'add_message'); and always append message without user check
D. Use add_action('wp_footer', 'add_message'); to add message after content

Solution

  1. Step 1: Choose the correct hook and method

    To modify post content, add_filter('the_content', ...) is correct because it changes content before display.
  2. Step 2: Add user check inside callback

    To show message only to logged-in users, check user status inside the callback function before appending the message.
  3. Final Answer:

    Use add_filter('the_content', 'add_message'); and inside add_message check if user is logged in before appending message -> Option A
  4. Quick Check:

    Filter content + user check = A [OK]
Hint: Filter content and check user inside function [OK]
Common Mistakes:
  • Using add_action instead of add_filter for content change
  • Not checking user login status
  • Adding message in footer instead of content
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard