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.

Becoming a better WordPress Developer


Published on

With a very low barrier to entry, developing with WordPress has become particularly popular in the past few years. However, this sometimes means that standards and best practices aren’t well respected.

This talk will cover WordPress coding standards, best practices, and technical tools to become a better developer. This will be a resourceful presentation for anyone beginning, interested in, and those who have been developing with WordPress for a long time. Some of the topics covered will be proper usage of hooks and filters, creating your own plugins (instead of always using that functions.php), making use of the mu-plugins folder, how to properly escape and sanitize user-generated content, security gotchas and more.

The talk is geared at beginning developers as much as it is for advanced developers. Basic php knowledge is strongly recommended, though not required.

Published in: Technology, Business
  • Be the first to comment

Becoming a better WordPress Developer

  1. 1. Becoming a better WordPress Developer Joey Kudish @jkudish
  2. 2. why am I here?• developing with WordPress since 2007• previously: high scale WP client sites + custom plugins• currently: Code Wrangler for / Automattic• I want to share my experience and knowledge
  3. 3. what is WordPress development?themes, plugins, html,javascript, css, php, html5,css3, mysql, code, blah,blah, blah...
  4. 4. all these things come together
  5. 5. WordPress core
  6. 6. contribute to core• contributing makes you feel good, and helps others• submit a ticket / bug report• write a patch• answer support forum questions• help document something
  7. 7. core/handbook/
  8. 8. use core to your advantage
  9. 9. use built-in APIs• WP_HTTP:• Filesystem:• Settings:• CPTs/Taxonomies:• WPDB:• Hooks• And much much more...
  10. 10. action hooksActions allow you to run arbitrary code at aspecific point during WordPress codeexecutiondo_action( wp_head );add_action( wp_head, jkudish_head );
  11. 11. filter hooks Filters allow you to modify a variable (before it is output, saved, used, whatever...)apply_filters( the_content, $post_content );add_filter( the_content, jkudish_filter );
  12. 12. hooks API FTWdo_action( the_action,$addtl_arg1, $addtl_arg2 [...] );$variable =apply_filters( the_filter,$variable, $addtl_arg1,$addtl_arg2 [...] );
  13. 13. registering hooks• Actions: add_action( the_action, callback_func, 10, 3 );• Filters: add_filter( the_filter, callback_func, 10, 3 );• Callback function: function callback_func( $value, $addtl_arg1, $addtl_arg2 ... )
  14. 14. finding the right hooks• Search through core• Plugin API on the Codex: Plugin_API• Adam Browns Hook Database: wp_hooks• WP Candy Article on hooks: how-to-use-wordpress-hooks
  15. 15. better yetadd_action( all,jkudish_all_the_hooks ) );function jkudish_all_the_hooks() { error_log( print_r( current_filter(), true ) );}
  16. 16. other helpershas_action();has_filter();did_action();remove_action();remove_all_actions();remove_all_filters();
  17. 17. where to put your code• themes templates for display on the front-end and related helper functions• plugins code that can be toggled on/off and modifies the behaviour of WordPress in some way or provides additional functionality• mu-plugins just like plugins but automatically loaded to run on each page load
  18. 18. let core tell youwhen you are wrong• WP_DEBUG• _doing_it_wrong();• unit tests• watch Mo’s presentation :)
  19. 19. code is poetrymake things legible, classy & elegant; follow the WP coding standards
  20. 20. <?php vs <?
  21. 21. single quotes unless youneed to evaluate a variable <?php echo a great string; ?> vs <?php $dog_name = Winston; echo "my dogs name is: $dog_name"; ?>
  22. 22. naming is important• not so much: $myGreatVariable = 2;• even worse: $MygreatVariable = myFunction();• just stupid: $mygReAtvariAble = FUNcTiO_n();• correct: $my_great_variable = my_function();
  23. 23. spacing for legibility• not so much: foreach($posts as $post)• even worse: for($i<5;$i=0;$i++)• just stupid: if($coDeisineLigible) {$youcantReadthis=true;}• correct: foreach ( $posts as $post )
  24. 24. brackets, indentation + empty lines if ( is_page() ) {     echo this is a page; } elseif ( is_single() ) {     echo this is a post;     echo <br>how wonderful!; } else {     echo not a page or post; }
  25. 25. Yoda conditionsWhat happens if you accidentally forget a = ? if ( $city == Montreal ) vs. if ( Montreal == $city )
  26. 26. don’t get too cleverClever, but do you know what it does? isset( $var ) || $var = some_function();Easier to read: if ( ! isset( $var ) ) $var = some_function();
  27. 27. keep it elegant,simple and avoiduseless comments
  28. 28. What not to do<?php/* Get all our options from the database */global $options;foreach ($options as $value) { if (get_settings( $value[id] ) ===FALSE) { $$value[id] = $value[std]; } else { $$value[id] =get_settings( $value[id] ); }}
  29. 29. doing it right
  30. 30. <?phpclass WP_My_House { var $bricks = 0; function add_brick() { if ( ! $this->is_made_of_cement() ) return false; $this->bricks++; return true; } ...}$my_house = new WP_My_House();
  31. 31. beyond the standards
  32. 32. $wpdb->escape();$wpdb->prepare(); sanitize_*();
  33. 33. escape all the things• esc_attr(): escape an html attribute• intval(): make sure the value is an integer• wp_kses(): strip unwanted html tags• esc_html(): encodes html so it can be output as text• esc_js(): encodes strings to be used in javascript• esc_url(): encodes and validates URLs• Full list at: or in wp-includes/formatting.php
  34. 34. internationalize__( Hello World, my-plugin );_e( Hello World, my-plugin );_n( Comment, Comments, $comment_count,my-plugin );$mood = Cruel;printf( _x( Hello %s World, intro to theworld, my-plugin ), $mood );read more:
  35. 35. allow for others to hook in do_action( jkudish_setup_cpt );$sky_color =apply_filters( jkudish_sky_color, blue );
  36. 36. open sourcecode reviewcollaborateWordPress
  37. 37. Q&AMerci!