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

Wordpress Filters

Ben Sheldon
November 28, 2011
34

Wordpress Filters

Ben Sheldon

November 28, 2011
Tweet

Transcript

  1. Case Study: Adding class to hyperlinks containing images <a href="...">

    <img src="..." /> <a href="..." class="img" > <img src="..." /> <a href=”...” class=”img”><img src=”...” /></a>
  2. CSS a:hover img { background: ... } a img:parent {

    background: ... } WRONG JS / jQuery $(‘a img’).parent(‘a’).addClass(‘img’); POOR These “solutions” target/modify HTML in the visitor’s browser. Desired HTML should be coming from the server in the first place. BAD GOOD http://wordpress.org/support/topic/how-can-i-set-the-class-of-anchors a < img { background: ... }
  3. Wordpress Filters add_filter Filters modify specific text elements that are

    inserted into the database or displayed in your theme. Each “filterable” text-element has a unique name. http://codex.wordpress.org/Plugin_API http://codex.wordpress.org/Plugin_API/Filter_Reference Filters are easily added to your theme’s functions.php
  4. /** * Attach a class to linked images' parent anchors

    * e.g. a img => a.img img */ function give_linked_images_class($html, $id, $caption, $title, $align, $url, $size, $alt = '' ){ $classes = 'img'; // separated by spaces, e.g. 'img image-link' // check if there are already classes assigned to the anchor if ( preg_match('/<a.*? class=".*?">/', $html) ) { $html = preg_replace('/(<a.*? class=".*?)(".*?>)/', '$1 ' . $classes . '$2', $html); } else { $html = preg_replace('/(<a.*?)>/', '$1 class="' . $classes . '" >', $html); } return $html; } add_filter('image_send_to_editor','give_linked_images_class',10,8); 1 2 3 4 5 http://www.island94.org/2011/01/adding-class-to-wordpress-linked-images/
  5. Specifically mention filters in title when asking questions in the

    Wordpress.org Forums (or wordpress.stackexchange.com ): “How do I filter the output of...?” GOOD OK You can always filter on “the_content”. EMPATHY Finding the proper filter_name and callback function’s arguments is hard. @bensheldon blogs at http://island94.org