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.

There's a Filter For That


Published on

Presented at WordCamp Albuquerque, Sept. 14, 2013.

  • Be the first to comment

There's a Filter For That

  1. 1. THERE’S A FILTER FORTHAT Drew Jaynes | WCABQ ’13
  2. 2. WHO I AM Drew Jaynes Web Engineer, 10up Core Contributor WordPress Docs Team
  3. 3. WHAT IS A FILTER? A filter is a function that: 1.Takes a specific WordPress value 2. (maybe) modifies it 3. Spits the resulting value back out
  4. 4. OK ... ?
  5. 5. apply_filters()
  6. 6. apply_filters() – 1,300+ filter hooks in core (3.6+) – Filter values of all types, modify default behavior – Multiple filters run per hook, based on priority
  7. 7. ADDING OR REMOVING FILTERS add_filter( 'hook_name', 'callback', #priority, #args ); – When removing a filter, the hook, callback and priority must match exactly. Fails silently. remove_filter( 'hook_name', 'callback', #priority ); – Define priority any time. Define the args count + 1 if additional args are passed from the filter hook
  8. 8. ALLTOGETHER NOW // $value is filterable apply_filters( ‘hook_name’, $value, (optional) $args ); function callback( $value, $arg ) { // do stuff return $value; } add_filter( 'hook_name', 'callback', 10, 2 );
  9. 9. CONTENT
  10. 10. ‘enter_title_here’ Args:(string $enter_title_here, WP_Post $post) – Match title prompt text to your custom post type – Adds polish to the experience Filter ‘Enter title here’ placeholder text
  11. 11. ‘post_updated_messages’ Args:(array $messages) – Not handled by WordPress out of the box – Use with custom post types – Customize ‘Post updated’,‘Post deleted’, etc. Filter post updated|published|trashed|etc. messages.
  12. 12. ‘admin_post_thumbnail_html’ Args:(string $content, int $post->ID) ‘media_view_strings’ Args:(array $strings, WP_Post $post) Filter HTML output of Featured Image meta box Filter media strings localized for JavaScript
  13. 13. WORKFLOW
  14. 14. ‘the_editor_content’ Args:(string $content) – Pre-fab post template – Check if the content is empty Filter the content in the editor (new and existing posts)
  15. 15. ‘custom_menu_order’ Args:(bool false) Enable/disable custom admin menu ordering ‘menu_order’ Args:(array $menu_order) Filter the top-level menu order in the admin menu
  16. 16. ‘custom_menu_order’ // enable custom menu order add_filter( ‘custom_menu_order’, __return_true’ );
  17. 17. ‘menu_order’ function change_menu_order( $menu_order ); return array( 'index.php', 'separator1', 'edit.php', 'edit.php?post_type=page', 'users.php', 'upload.php', 'edit-comments.php', 'separator2', 'themes.php', 'plugins.php', 'tools.php', 'options-general.php', 'separator-last' ); } add_filter( ‘menu_order’, ‘change_menu_order’ );
  18. 18. ‘default_hidden_meta_boxes’ Args:(array $hidden, WP_Screen $screen) – Standardize UX for all users – Doesn’t prevent future user changes Contextually filter meta boxes hidden by default
  19. 19. ‘post_types_to_delete_with_user’ Args:(array $post_types_to_delete, int $id) – Overrides ‘delete_with_user’ post type setting Filter which post types to delete with a user
  20. 20. FRONT-END
  21. 21. ‘the_content’ (string $content) – Frequently used and abused in themes and plugins – Litmus test: is it content? Filter the post content
  22. 22. ‘post|body_class’ Args:(array $classes) – Reliant on themes using post|body_class() in templates – Style things in specific contexts, e.g. post_type, post format, etc. Filter body classes or post classes
  23. 23. ‘excerpt_length’ Args:(int $number) – Commonly filtered by themes, default is 55 characters Filter the length (in characters) of the excerpt
  24. 24. ‘show_admin_bar’ (bool true) // Disable Toolbar add_filter( ‘show_admin_bar’, ‘__return_false’ ); Show/hide theToolbar on the front-end
  25. 25. ‘disable_captions’ (bool false) // Disable captions add_filter( ‘disable_captions’, ‘__return_true’ ); Disable/enable image captions
  27. 27. ‘plugins|themes_api_*’ – Different result object, arguments, or complete overhaul Filter plugin or theme installer pages ‘plugins|themes_api_args’ ‘plugins|themes_api’ ‘plugins|themes_api_result’
  28. 28. ‘enable_post_by_email_configuration’ Args:(bool false) // disable post by email add_filter( ‘enable_post_by_email_configuration’, ‘__return_false’ ); Enable/disable Post by Email
  29. 29. MOAR DEV FILTERS ‘request’ Args:(array $query_vars) Directly filter the current request’s query vars ‘shortcode_atts_$shortcode’ Args:(array $out, array $pairs, array $atts) Filter a shortcode’s default attributes (3.6+) – Output atts, default atts, user-defined atts
  30. 30. MOAR DEV FILTERS ‘wp_xmlrpc_server_class’ Args:(string $class) Filter the class used for handling XML-RPC requests ‘xmlrpc_methods’ Args:(array $methods) Register custom XML-RPC methods
  31. 31. QUESTIONS?