Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hooked on WordPress: WordCamp Columbus

1,064 views

Published on

Slides from talk given at WordCamp Columbus 2015.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Hooked on WordPress: WordCamp Columbus

  1. 1. Hooked on WordPress An Introduction to Actions & Filters @shawnhooper - shawnhooper.ca WordCamp Columbus July 17, 2015
  2. 2. @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
  3. 3. What is a Hook ? @shawnhooper - shawnhooper.ca
  4. 4. What is a Hook ? @shawnhooper - shawnhooper.ca
  5. 5. What is a Hook ? @shawnhooper - shawnhooper.ca
  6. 6. What is a Hook ? @shawnhooper - shawnhooper.ca
  7. 7. What is a Hook ? @shawnhooper - shawnhooper.ca
  8. 8. What is a Hook ? @shawnhooper - shawnhooper.ca
  9. 9. What is a Hook ? @shawnhooper - shawnhooper.ca Never Modify Core
  10. 10. What is a Hook ? @shawnhooper - shawnhooper.ca Hooks allow you to change the core functionality of WordPress. ! They are implemented through 
 themes and plugins.
  11. 11. What is a Hook ? @shawnhooper - shawnhooper.ca WordPress Plugin API
  12. 12. What is a Hook ? @shawnhooper - shawnhooper.ca There are two kinds of hooks in WordPress: ! Actions and Filters
  13. 13. Action Hooks @shawnhooper - shawnhooper.ca Flickr: ifindkarma
  14. 14. Action Hooks @shawnhooper - shawnhooper.ca An action is triggered when a specific event takes place in WordPress.
  15. 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. 16. Action Hooks @shawnhooper - shawnhooper.ca do_action( $tag ); ! do_action ($tag, $arg_a, $arg_b, $arg_c );
  17. 17. Action Hooks @shawnhooper - shawnhooper.ca do_action ( ‘wp_head’ );! ! wp-includesgeneral-template.php do_action ( ‘save_post’, $post->ID, $post, $update );! ! wp-includespost.php
  18. 18. Action Hooks @shawnhooper - shawnhooper.ca add_action ( $hook, $function_to_add );
 
 add_action( $hook, $function_to_add, $priority, $accepted_args );
  19. 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. 20. Action Hooks @shawnhooper - shawnhooper.ca add_action( ‘wp_head’, ‘smh_add_metadesc’); function smh_add_metadesc() { echo ‘<meta name=“description” value=“Hello!” />’; }
  21. 21. Filter Hooks @shawnhooper - shawnhooper.ca
  22. 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. 23. Filter Hooks @shawnhooper - shawnhooper.ca $filter = apply_filters( $tag, $value ); ! $value = apply_filters ($tag, $value, $var1, $var2, … );
  24. 24. Filter Hooks @shawnhooper - shawnhooper.ca $content = apply_filters ( ‘the_content’, $content );! ! wp-includespost-template.php $atts = apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers', 'attachments' ) );
 
 wp-includespluggable.php
  25. 25. Filter Hooks @shawnhooper - shawnhooper.ca add_filter ( $tag, $function_to_add );
 
 add_filter( $tag, $function_to_add, $priority, $accepted_args );
  26. 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. 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. 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. 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. 30. That’s the basics…. @shawnhooper - shawnhooper.ca
  31. 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. 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. 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-includespluggable.php ! ! NOTE: No new pluggable functions are being added. They are being replaced with filters, a more flexible solution.
  34. 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. 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. 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. 37. Naming Conventions @shawnhooper - shawnhooper.ca Function names must be unique ! (or you risk the White Screen of Death!)
  38. 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. 39. @shawnhooper - shawnhooper.ca Thank You!
  40. 40. @shawnhooper - shawnhooper.ca Questions ? Twitter: @shawnhooper
 
 WordPress Slack: @shooper
 
 Slides & Notes Posted on:
 www.shawnhooper.ca
 
 E-Mail: shawn@actionablebooks.com

×