Download - Hooked on WordPress: WordCamp Columbus
Hooked on WordPressAn Introduction to Actions & Filters
@shawnhooper - shawnhooper.ca
WordCamp Columbus July 17, 2015
@shawnhooper - shawnhooper.ca
Hi, I’m Shawn
• Developing for the web since the mid-90s !• Using WordPress since ~ version 2.8 (2009)
!• Chief Technology Officer at Actionable Books !• Lives in Ottawa, Canada
What is a Hook ?
@shawnhooper - shawnhooper.ca
Hooks allow you to change the core functionality of WordPress.
!They are implemented through
themes and plugins.
What is a Hook ?
@shawnhooper - shawnhooper.ca
There are two kinds of hooks in WordPress: !
Actions and Filters
Action Hooks
@shawnhooper - shawnhooper.ca
An action is triggered when a specific event takes place in WordPress.
Action Hooks
@shawnhooper - shawnhooper.ca
What can you do in an action?!!
Modify data in the database Send an e-mail
Interact with APIs Modify code being sent to the browser
Action Hooks
@shawnhooper - shawnhooper.ca
do_action( $tag ); !
do_action ($tag, $arg_a, $arg_b, $arg_c );
Action Hooks
@shawnhooper - shawnhooper.ca
do_action ( ‘wp_head’ );!!
wp-includes\general-template.php
do_action ( ‘save_post’, $post->ID, $post, $update );!!
wp-includes\post.php
Action Hooks
@shawnhooper - shawnhooper.ca
add_action ( $hook, $function_to_add );
add_action( $hook, $function_to_add, $priority, $accepted_args );
Action Hooks
@shawnhooper - shawnhooper.ca
The optional priority parameter allows you to specify the order in which the hooked actions
will run. !
The default value is 10.
Action Hooks
@shawnhooper - shawnhooper.ca
add_action( ‘wp_head’, ‘smh_add_metadesc’);
function smh_add_metadesc() { echo ‘<meta name=“description” value=“Hello!” />’; }
Filter Hooks
@shawnhooper - shawnhooper.ca
Filters are functions that WordPress passes data through, at certain points in execution, just before
taking some action with the data. !
Source: WordPress Codex
Filter Hooks
@shawnhooper - shawnhooper.ca
$filter = apply_filters( $tag, $value ); !
$value = apply_filters ($tag, $value, $var1, $var2, … );
Filter Hooks
@shawnhooper - shawnhooper.ca
$content = apply_filters ( ‘the_content’, $content );!!
wp-includes\post-template.php
$atts = apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers', 'attachments' ) );
wp-includes\pluggable.php
Filter Hooks
@shawnhooper - shawnhooper.ca
add_filter ( $tag, $function_to_add );
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Filter Hooks
@shawnhooper - shawnhooper.ca
The optional priority parameter allows you to specify the order in which the hooked filters
will run. !
The default value is 10.
Filter Hooks
@shawnhooper - shawnhooper.ca
function smh_old_post_notice($content) { ! $days = floor( ( time() - get_the_date( 'U' ) ) / ( 60 * 60 * 24 ) ); ! if ( $days > 365 ) { $content = '<div class="old_post">This is an older post. Beware of possible out-of-date advice.</div>' . $content; } ! return $content; } !
add_filter(‘the_content’, ‘smh_old_post_notice’);
Hooks in Themes
@shawnhooper - shawnhooper.ca
99% of the time, you’ll use hooks and filters in plugins.
!But there are some times where it’s useful to put these
functions into your theme’s functions.php file.
Hooks in Themes
@shawnhooper - shawnhooper.ca
Examples: !
Theme Activation Hook Modifying the “Read More” Text
Filtering Menu Content Setting up the Customizer
!These are all things that are isolated to the active theme. If you
change themes, your site won’t break.
Extending Plugins
@shawnhooper - shawnhooper.ca
WordPress Core isn’t the only thing that can be extended with hooks.
!A well written plugin can also expose Actions and Filters
that will allow you to add, remove, or modify its functionality.
Variable Hooks
@shawnhooper - shawnhooper.ca
Some hooks include variables in their names. These are very powerful hooks that allow you to interact with only specific objects
in WordPress. !
save_post_{$post_type}
ex: add_action ( ‘save_post_page’, ‘my_function’); !
would only trigger when a page is being saved, not a post.
Pluggable Functions
@shawnhooper - shawnhooper.ca
A set of core WordPress functions that can be overridden in your plugins.
!They can all be found in wp-includes\pluggable.php
!!
NOTE: No new pluggable functions are being added. They are being replaced with filters, a more flexible solution.
Pluggable Functions
@shawnhooper - shawnhooper.ca
Only one plugin can make use of these functions. For safety, wrap the function with the function_exists() check:
if ( ! function_exists( ‘wp_mail’ ) ) { function wp_mail($to, $subject, $message, $headers = ‘’) { // do stuff }}
Removing Hooks
@shawnhooper - shawnhooper.ca
You can also remove hooks that have already been put into place. !!
remove_action( $tag, $function_name, $priority ); !
remove_filter ($tag, $function_to_remove, $priority );
Removing Hooks
@shawnhooper - shawnhooper.ca
You can also remove ALL hooks that have already been put into place.
!!
remove_all_actions( $tag, $priority ); !
remove_all_filters ($tag, $priority );
Naming Conventions
@shawnhooper - shawnhooper.ca
Function names must be unique !
(or you risk the White Screen of Death!)
Naming Conventions
@shawnhooper - shawnhooper.ca
PRO TIP: Put your plugin in a class.!!
add_action( ‘save_post’, array( $this, ‘send_email’) );
add_filter( ‘the_content’, array( $this, ‘old_post_warning’) );
@shawnhooper - shawnhooper.ca
Questions ?Twitter: @shawnhooper
WordPress Slack: @shooper
Slides & Notes Posted on:
www.shawnhooper.ca
E-Mail: [email protected]