SlideShare a Scribd company logo
1 of 28
Download to read offline
PLUGIN DEVELOPMENT
                          PRACTICES
    Presented By: Dan Pastori
          @danpastori           521 Dimensions
                                      TECHNOLGY SOLVING NEEDS




Sunday, June 3, 12
Dan Pastori

Sunday, June 3, 12
WHO IS DAN PASTORI?
                           Primary PHP/Java Developer

                          Co-Founded 521 Dimensions


                      Built two large plugins and one theme

                     Been tearing apart Wordpress for 3 years


Sunday, June 3, 12
OTHER PRODUCTS I’VE DEVELOPED FOR




                     And of course custom applications!

Sunday, June 3, 12
WORDPRESS IS THE BEST!
                         (at least from my experience!)

          Great Documentation


          Great Community


           Fast learning curve



Sunday, June 3, 12
PRE-REQUISITES
       Understanding of PHP



      Motivation/Consistency



      A goal to develop towards



Sunday, June 3, 12
WORDPRESS TERMINOLOGY
    2 Types of Hooks:

    1. Filter - Modifies text before it hits the screen.

    2. Action - Hooks launched during execution.




Sunday, June 3, 12
WHERE TO BEGIN?
          1. Find a need
          2. Focus on that need
          3. Prototype
          4. Jump right in

Sunday, June 3, 12
BEGIN YOUR PLUGIN




Sunday, June 3, 12
STRUCTURING PLUGIN
       Create Directories

                     /wp-content/plugins/[NAME]

                     /wp-content/plugins/[NAME]/css

                     /wp-content/plugins/[NAME]/js

                     /wp-content/plugins/[NAME]/images

                     /wp-content/plugins/[NAME]/includes

Sunday, June 3, 12
ADD MAIN FILE
                     /wp-content/plugins/[NAME]/[NAME].php




Sunday, June 3, 12
Add Header In Main File
                     /*
                     Plugin Name: [NAME]
                     Plugin URI: http://www.521dimensions.com/wp-pictures
                     Description: Pictures in Wordpress!
                     Version: 1.0
                     Author: Dan Pastori
                     Author URI: http://www.521dimensions.com
                     License: GPL2
                     */




Sunday, June 3, 12
OOP VS FUNCTIONAL?
                     Modern programming practices say OOP

                                  Both work!




Sunday, June 3, 12
BEGIN CODING!
                     DO NOT OVER-WRITE CORE FUNCTIONALITY


                     Use predefined functions as much as possible
                            (They’re there for a reason!)




Sunday, June 3, 12
What happens when you activate and
               deactivate?

         register_activation_hook(__FILE__, ‘function_name’)

         register_deactivation_hook(__FILE__, ‘function_name’)




Sunday, June 3, 12
Open [NAME].php

   OOP
   ...
   class WPPictures {
       static function install() {
             // do not generate any output here
       }
   }
   register_activation_hook( __FILE__, array('WPPictures', 'install') );


  Functional
   ...
   function wp_pictures_install(){

   }
   register_activation_hook( __FILE__, ‘wp_pictures_install’ );



Sunday, June 3, 12
WORKING WITH THE DATABASE
                     global $wpdb object


                         dbDelta()




Sunday, June 3, 12
INITIAL INSTALL
          1. Check for upgrades
              If {installed version} != {plugin version}
          2. Create Tables

          3. Set options




Sunday, June 3, 12
CSS AND JS
        Register first, enqueue second
       wp_register_script('product_js', plugins_url('/js/
       product_list.js', __FILE__));

      wp_enqueue_script('thickbox',null,array('jquery'));




Sunday, June 3, 12
DASHBOARD VISUAL APPEAL
                One management page, append to settings menu

               Multiple management pages, have it’s own heading




Sunday, June 3, 12
ADMIN MENUS
    add_menu_page(PAGE TITLE, MENU TITLE, PERMISSION, SLUG, FUNCTION, LOGO);

   add_submenu_page(PARENT SLUG, PAGE TITLE, MENU TITLE, 'CAPABILITY', 'MENU SLUG',
'FUNCTION');




Sunday, June 3, 12
MEDIA GALLERY
                     wp_insert_attachment($attachment, $filename,
                                    $parentPostID)




Sunday, June 3, 12
PERMISSIONS
                       current_user_can('manage_options')




               http://codex.wordpress.org/Roles_and_Capabilities

Sunday, June 3, 12
SHORTCODES
        add_shortcode('product-list', 'product_list_shortcode');

       extract( shortcode_atts( array(
                 'categoryID' => 'all',
                    ), $attributes ));




Sunday, June 3, 12
ENSURE PLUGIN QUALITY
                 Be accepting of criticism
                 DOCUMENT... PLEASE :)
                 Update
                 Don’t solve everything, do one thing right




Sunday, June 3, 12
BE THE SERVER ADMIN’S FRIEND
                     (And have a quality plugin)
       Minimize requests

       Make sure your resources are present

       Use common php packages

       Don’t require 777 on ANY directory!




Sunday, June 3, 12
LAUNCH PLUGIN
                        Have your Mom use your plugin


                             Accept criticism

                     Maintain thorough documentation




Sunday, June 3, 12
QUESTIONS?

                       @danpastori




Sunday, June 3, 12

More Related Content

Viewers also liked

My first 3 months working with word press
My first 3 months working with word pressMy first 3 months working with word press
My first 3 months working with word press
Noe Lopez
 
WordPress & eCommerce - WCLV 2011
WordPress & eCommerce - WCLV 2011WordPress & eCommerce - WCLV 2011
WordPress & eCommerce - WCLV 2011
Shayne Sanderson
 
Options, and Transients, and Theme Mods — Oh my!
Options, and Transients, and Theme Mods — Oh my!Options, and Transients, and Theme Mods — Oh my!
Options, and Transients, and Theme Mods — Oh my!
Konstantin Obenland
 
Customizing the custom loop wordcamp 2012-jeff
Customizing the custom loop   wordcamp 2012-jeffCustomizing the custom loop   wordcamp 2012-jeff
Customizing the custom loop wordcamp 2012-jeff
Alexander Sapountzis
 
Introducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystemIntroducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystem
GGDBologna
 
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
GGDBologna
 
Responsive Images (STL WordCamp 2014)
Responsive Images (STL WordCamp 2014)Responsive Images (STL WordCamp 2014)
Responsive Images (STL WordCamp 2014)
joemcgill
 

Viewers also liked (16)

My first 3 months working with word press
My first 3 months working with word pressMy first 3 months working with word press
My first 3 months working with word press
 
Open Source Entrepreneurship
Open Source EntrepreneurshipOpen Source Entrepreneurship
Open Source Entrepreneurship
 
how to not design like a developer
how to not design like a developerhow to not design like a developer
how to not design like a developer
 
WordPress in a Time of Crisis
WordPress in a Time of CrisisWordPress in a Time of Crisis
WordPress in a Time of Crisis
 
Wc norrkoping-2015
Wc norrkoping-2015Wc norrkoping-2015
Wc norrkoping-2015
 
WordPress & eCommerce - WCLV 2011
WordPress & eCommerce - WCLV 2011WordPress & eCommerce - WCLV 2011
WordPress & eCommerce - WCLV 2011
 
Optimizing Content Visibility (St. Louis WordCamp)
Optimizing Content Visibility (St. Louis WordCamp)Optimizing Content Visibility (St. Louis WordCamp)
Optimizing Content Visibility (St. Louis WordCamp)
 
SEO para Wordpress (WordCamp Salvador)
SEO para Wordpress (WordCamp Salvador)SEO para Wordpress (WordCamp Salvador)
SEO para Wordpress (WordCamp Salvador)
 
Working with WP_Query in WordPress
Working with WP_Query in WordPressWorking with WP_Query in WordPress
Working with WP_Query in WordPress
 
Options, and Transients, and Theme Mods — Oh my!
Options, and Transients, and Theme Mods — Oh my!Options, and Transients, and Theme Mods — Oh my!
Options, and Transients, and Theme Mods — Oh my!
 
Customizing the custom loop wordcamp 2012-jeff
Customizing the custom loop   wordcamp 2012-jeffCustomizing the custom loop   wordcamp 2012-jeff
Customizing the custom loop wordcamp 2012-jeff
 
Customize your theme using css
Customize your theme using cssCustomize your theme using css
Customize your theme using css
 
Introducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystemIntroducing the wpXtreme ecosystem
Introducing the wpXtreme ecosystem
 
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
Responsività e integrazioni social: l’utente al centro nel nuovo sito Volvo TV
 
Leveraging Wordpress for an Ecommerce Website
Leveraging Wordpress for an Ecommerce WebsiteLeveraging Wordpress for an Ecommerce Website
Leveraging Wordpress for an Ecommerce Website
 
Responsive Images (STL WordCamp 2014)
Responsive Images (STL WordCamp 2014)Responsive Images (STL WordCamp 2014)
Responsive Images (STL WordCamp 2014)
 

Similar to Wordpress Plugin Development Practices

Introduction to Twig
Introduction to TwigIntroduction to Twig
Introduction to Twig
markstory
 
Wordpress bb-portland
Wordpress bb-portlandWordpress bb-portland
Wordpress bb-portland
AllenSnook
 
3 reasons to contribute to drupal florian loretan (eng)
3 reasons to contribute to drupal florian loretan (eng)3 reasons to contribute to drupal florian loretan (eng)
3 reasons to contribute to drupal florian loretan (eng)
drupalconf
 
Drupal for Project Managers, Part 3: Launching
Drupal for Project Managers, Part 3: LaunchingDrupal for Project Managers, Part 3: Launching
Drupal for Project Managers, Part 3: Launching
Acquia
 
TripCase Unit Testing with Jasmine
TripCase Unit Testing with JasmineTripCase Unit Testing with Jasmine
TripCase Unit Testing with Jasmine
Stephen Pond
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
Ran Mizrahi
 
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben SpeakmonAtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
Atlassian
 

Similar to Wordpress Plugin Development Practices (20)

Introduction to Twig
Introduction to TwigIntroduction to Twig
Introduction to Twig
 
Dapper Drupal - Custom Tailored Drupal Themes
Dapper Drupal - Custom Tailored Drupal ThemesDapper Drupal - Custom Tailored Drupal Themes
Dapper Drupal - Custom Tailored Drupal Themes
 
Plugin Development Practices
Plugin Development PracticesPlugin Development Practices
Plugin Development Practices
 
Wordpress bb-portland
Wordpress bb-portlandWordpress bb-portland
Wordpress bb-portland
 
Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013   Symfony2 and MongoDB - MidwestPHP 2013
Symfony2 and MongoDB - MidwestPHP 2013
 
Implementing Quality on Java projects
Implementing Quality on Java projectsImplementing Quality on Java projects
Implementing Quality on Java projects
 
3 reasons to contribute to drupal florian loretan (eng)
3 reasons to contribute to drupal florian loretan (eng)3 reasons to contribute to drupal florian loretan (eng)
3 reasons to contribute to drupal florian loretan (eng)
 
Passing a Front end Developer interview
Passing a Front end Developer interview Passing a Front end Developer interview
Passing a Front end Developer interview
 
Fork cli tool
Fork cli toolFork cli tool
Fork cli tool
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
Lightweight javaEE with Guice
Lightweight javaEE with GuiceLightweight javaEE with Guice
Lightweight javaEE with Guice
 
Unit Testing in SilverStripe
Unit Testing in SilverStripeUnit Testing in SilverStripe
Unit Testing in SilverStripe
 
Pundit
PunditPundit
Pundit
 
Drupal for Project Managers, Part 3: Launching
Drupal for Project Managers, Part 3: LaunchingDrupal for Project Managers, Part 3: Launching
Drupal for Project Managers, Part 3: Launching
 
Building high performance web apps.
Building high performance web apps.Building high performance web apps.
Building high performance web apps.
 
TripCase Unit Testing with Jasmine
TripCase Unit Testing with JasmineTripCase Unit Testing with Jasmine
TripCase Unit Testing with Jasmine
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
 
Html5 apis
Html5 apisHtml5 apis
Html5 apis
 
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben SpeakmonAtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
AtlasCamp 2010: The Atlassian Plugin SDK For Fun & Profit - Ben Speakmon
 
Drupal 8 Plugin API - Manoj K
Drupal 8 Plugin API - Manoj KDrupal 8 Plugin API - Manoj K
Drupal 8 Plugin API - Manoj K
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Recently uploaded (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Wordpress Plugin Development Practices

  • 1. PLUGIN DEVELOPMENT PRACTICES Presented By: Dan Pastori @danpastori 521 Dimensions TECHNOLGY SOLVING NEEDS Sunday, June 3, 12
  • 3. WHO IS DAN PASTORI? Primary PHP/Java Developer Co-Founded 521 Dimensions Built two large plugins and one theme Been tearing apart Wordpress for 3 years Sunday, June 3, 12
  • 4. OTHER PRODUCTS I’VE DEVELOPED FOR And of course custom applications! Sunday, June 3, 12
  • 5. WORDPRESS IS THE BEST! (at least from my experience!) Great Documentation Great Community Fast learning curve Sunday, June 3, 12
  • 6. PRE-REQUISITES Understanding of PHP Motivation/Consistency A goal to develop towards Sunday, June 3, 12
  • 7. WORDPRESS TERMINOLOGY 2 Types of Hooks: 1. Filter - Modifies text before it hits the screen. 2. Action - Hooks launched during execution. Sunday, June 3, 12
  • 8. WHERE TO BEGIN? 1. Find a need 2. Focus on that need 3. Prototype 4. Jump right in Sunday, June 3, 12
  • 10. STRUCTURING PLUGIN Create Directories /wp-content/plugins/[NAME] /wp-content/plugins/[NAME]/css /wp-content/plugins/[NAME]/js /wp-content/plugins/[NAME]/images /wp-content/plugins/[NAME]/includes Sunday, June 3, 12
  • 11. ADD MAIN FILE /wp-content/plugins/[NAME]/[NAME].php Sunday, June 3, 12
  • 12. Add Header In Main File /* Plugin Name: [NAME] Plugin URI: http://www.521dimensions.com/wp-pictures Description: Pictures in Wordpress! Version: 1.0 Author: Dan Pastori Author URI: http://www.521dimensions.com License: GPL2 */ Sunday, June 3, 12
  • 13. OOP VS FUNCTIONAL? Modern programming practices say OOP Both work! Sunday, June 3, 12
  • 14. BEGIN CODING! DO NOT OVER-WRITE CORE FUNCTIONALITY Use predefined functions as much as possible (They’re there for a reason!) Sunday, June 3, 12
  • 15. What happens when you activate and deactivate? register_activation_hook(__FILE__, ‘function_name’) register_deactivation_hook(__FILE__, ‘function_name’) Sunday, June 3, 12
  • 16. Open [NAME].php OOP ... class WPPictures { static function install() { // do not generate any output here } } register_activation_hook( __FILE__, array('WPPictures', 'install') ); Functional ... function wp_pictures_install(){ } register_activation_hook( __FILE__, ‘wp_pictures_install’ ); Sunday, June 3, 12
  • 17. WORKING WITH THE DATABASE global $wpdb object dbDelta() Sunday, June 3, 12
  • 18. INITIAL INSTALL 1. Check for upgrades If {installed version} != {plugin version} 2. Create Tables 3. Set options Sunday, June 3, 12
  • 19. CSS AND JS Register first, enqueue second wp_register_script('product_js', plugins_url('/js/ product_list.js', __FILE__)); wp_enqueue_script('thickbox',null,array('jquery')); Sunday, June 3, 12
  • 20. DASHBOARD VISUAL APPEAL One management page, append to settings menu Multiple management pages, have it’s own heading Sunday, June 3, 12
  • 21. ADMIN MENUS add_menu_page(PAGE TITLE, MENU TITLE, PERMISSION, SLUG, FUNCTION, LOGO); add_submenu_page(PARENT SLUG, PAGE TITLE, MENU TITLE, 'CAPABILITY', 'MENU SLUG', 'FUNCTION'); Sunday, June 3, 12
  • 22. MEDIA GALLERY wp_insert_attachment($attachment, $filename, $parentPostID) Sunday, June 3, 12
  • 23. PERMISSIONS current_user_can('manage_options') http://codex.wordpress.org/Roles_and_Capabilities Sunday, June 3, 12
  • 24. SHORTCODES add_shortcode('product-list', 'product_list_shortcode'); extract( shortcode_atts( array( 'categoryID' => 'all', ), $attributes )); Sunday, June 3, 12
  • 25. ENSURE PLUGIN QUALITY Be accepting of criticism DOCUMENT... PLEASE :) Update Don’t solve everything, do one thing right Sunday, June 3, 12
  • 26. BE THE SERVER ADMIN’S FRIEND (And have a quality plugin) Minimize requests Make sure your resources are present Use common php packages Don’t require 777 on ANY directory! Sunday, June 3, 12
  • 27. LAUNCH PLUGIN Have your Mom use your plugin Accept criticism Maintain thorough documentation Sunday, June 3, 12
  • 28. QUESTIONS? @danpastori Sunday, June 3, 12