hooked on wordpress: wordcamp columbus

40
Hooked on WordPress An Introduction to Actions & Filters @shawnhooper - shawnhooper.ca WordCamp Columbus July 17, 2015

Upload: shawn-hooper

Post on 14-Aug-2015

135 views

Category:

Technology


2 download

TRANSCRIPT

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

What is a Hook ?

@shawnhooper - shawnhooper.ca

What is a Hook ?

@shawnhooper - shawnhooper.ca

What is a Hook ?

@shawnhooper - shawnhooper.ca

What is a Hook ?

@shawnhooper - shawnhooper.ca

What is a Hook ?

@shawnhooper - shawnhooper.ca

What is a Hook ?

@shawnhooper - shawnhooper.ca

Never Modify Core

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

WordPress Plugin API

What is a Hook ?

@shawnhooper - shawnhooper.ca

There are two kinds of hooks in WordPress: !

Actions and Filters

Action Hooks

@shawnhooper - shawnhooper.ca

Flickr: ifindkarma

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

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.

That’s the basics….

@shawnhooper - shawnhooper.ca

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

Thank You!

@shawnhooper - shawnhooper.ca

Questions ?Twitter: @shawnhooper

WordPress Slack: @shooper

Slides & Notes Posted on:

www.shawnhooper.ca

E-Mail: [email protected]