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

Fa4da3fe79ba23c483bcb977b0a340ca?s=128

Shawn Hooper

July 14, 2019
Tweet

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

  4. What is a Hook ? @shawnhooper - shawnhooper.ca

  5. What is a Hook ? @shawnhooper - shawnhooper.ca

  6. What is a Hook ? @shawnhooper - shawnhooper.ca

  7. What is a Hook ? @shawnhooper - shawnhooper.ca

  8. What is a Hook ? @shawnhooper - shawnhooper.ca

  9. What is a Hook ? @shawnhooper - shawnhooper.ca Hooks allow

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

    Core ( or Parent Themes )
  11. What is a Hook ? @shawnhooper - shawnhooper.ca WordPress Plugin

    API
  12. What is a Hook ? @shawnhooper - shawnhooper.ca There are

    two kinds of hooks in WordPress: Actions and Filters
  13. Action Hooks @shawnhooper - shawnhooper.ca Flickr: ifindkarma

  14. Action Hooks @shawnhooper - shawnhooper.ca An action is triggered when

    a specific event takes place in WordPress.
  15. 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
  16. Action Hooks @shawnhooper - shawnhooper.ca do_action( $tag ); do_action ($tag,

    $arg_a, $arg_b, $arg_c );
  17. 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
  18. Action Hooks @shawnhooper - shawnhooper.ca add_action ( $hook, $function_to_add );


    
 add_action( $hook, $function_to_add, $priority, $accepted_args );
  19. 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.
  20. Action Hooks @shawnhooper - shawnhooper.ca add_action( ‘wp_head’, ‘smh_add_metadesc’); function smh_add_metadesc()

    { echo ‘<meta name=“description” value=“Hello!” />’; }
  21. Filter Hooks @shawnhooper - shawnhooper.ca

  22. 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
  23. Filter Hooks @shawnhooper - shawnhooper.ca $filter = apply_filters( $tag, $value

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


    
 add_filter( $tag, $function_to_add, $priority, $accepted_args );
  26. 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.
  27. 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’);
  28. 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.
  29. 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.
  30. That’s the basics…. @shawnhooper - shawnhooper.ca

  31. 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.
  32. 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.
  33. 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.
  34. 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 }
 }
  35. 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 );
  36. 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 );
  37. Naming Conventions @shawnhooper - shawnhooper.ca Function names must be unique

    (or you risk the White Screen of Death!)
  38. 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’) );
  39. @shawnhooper - shawnhooper.ca Thank You!

  40. @shawnhooper - shawnhooper.ca Questions ? Twitter: @shawnhooper
 
 WordPress Slack:

    @shooper
 
 Slides & Notes Posted on:
 www.shawnhooper.ca
 
 E-Mail:
 shawn@actionable.co