Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hooked On WordPress

Hooked On WordPress

An introduction to the hook ecosystem (actions & filters) in WordPress

Shawn Hooper

July 14, 2019
Tweet

More Decks by Shawn Hooper

Other Decks in Technology

Transcript

  1. Hooked on WordPress An Introduction to Actions & Filters @shawnhooper

    - shawnhooper.ca WordCamp Ottawa
 July 2019
  2. @shawnhooper - shawnhooper.ca Hi, I’m Shawn • Developing for the

    web since the mid-90s • Using WordPress since ~ version 2.8 (2009) • Director of IT at Actionable.co • Lives in Ottawa, Canada
  3. What is a Hook ? @shawnhooper - shawnhooper.ca Hooks allow

    you to change the core functionality of WordPress. They are implemented through 
 themes and plugins.
  4. What is a Hook ? @shawnhooper - shawnhooper.ca There are

    two kinds of hooks in WordPress: Actions and Filters
  5. 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
  6. 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
  7. Action Hooks @shawnhooper - shawnhooper.ca add_action ( $hook, $function_to_add );


    
 add_action( $hook, $function_to_add, $priority, $accepted_args );
  8. 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.
  9. 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
  10. Filter Hooks @shawnhooper - shawnhooper.ca $filter = apply_filters( $tag, $value

    ); $value = apply_filters ($tag, $value, $var1, $var2, … );
  11. 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
  12. Filter Hooks @shawnhooper - shawnhooper.ca add_filter ( $tag, $function_to_add );


    
 add_filter( $tag, $function_to_add, $priority, $accepted_args );
  13. 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.
  14. 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’);
  15. 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.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. 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 }
 }
  21. 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 );
  22. 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 );
  23. 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’) );
  24. @shawnhooper - shawnhooper.ca Questions ? Twitter: @shawnhooper
 
 WordPress Slack:

    @shooper
 
 Slides & Notes Posted on:
 www.shawnhooper.ca
 
 E-Mail:
 [email protected]