Creating and Mark Jaquith “JAKE-with” Maintaining WordPress @markjaquith Plugins mark@jaquith.me markjaquith.com
Why? Pa erns! Repo… Sanity.
Why make plugins
functions.php is not the new my-hacks.php
Plugins separate functionality from core and themes
Plugins comparmentalize your code
Plugins [comparmentalize] your code
Plugins [compart][mentalize] your code
Pa erns
<?php /* Plugin Name: NAME */
Encapsulate with CLASS
function your_initials_long_plugin_name_do_thing() vs. function do_thing()
<?php /* Plugin Name: NAME */ class CWS_ATL_Plugin { static $instance; function __construct() { self::$instance = $this; add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) ); } function plugins_loaded() { // Add actions and hooks here } } new CWS_ATL_Plugin;
function plugins_loaded() { add_filter( 'the_title', array( $this, 'the_title' ), 10, 2 ); add_action( 'init', array( $this, 'init' ), 5 ); add_action( 'omg', array( $this, 'is_really_tedious' ), 11, 3 ); }
if(!class_exists('CWS_Plugin_v2')) {class CWS_Plugin_v2{function hook($h){$p=10;$m=$this- >sanitize_method($h); $b=func_get_args();unset($b[0]);fo reach((array)$b as $a) {if(is_int($a))$p=$a;else $m=$a;} return add_action($h,array($this, $m),$p,999);}private function sanitize_method($m){return str_replace(array('.','-'),array(' _DOT_','_DASH_'),$m);}}}
<?php /* Plugin Name: NAME */ if(!class_exists('CWS_Plugin_v2')){class CWS_Plugin_v2{function hook($h){$p=10;$m=$this- >sanitize_method($h);$b=func_get_args();unset($b[0]);foreach((array)$b as $a){if(is_int($a))$p=$a;else $m=$a;}return add_action($h,array($this,$m),$p,999);}private function sanitize_method($m){return str_replace(array('.','-'),array('_DOT_','_DASH_'),$m);}}} class CWS_ATL_Plugin extends CWS_Plugin_v2 { static $instance; function __construct() { self::$instance = $this; $this->hook( 'plugins_loaded' ); } function plugins_loaded() { // Add actions and hooks here } } new CWS_ATL_Plugin;
// BEFORE function plugins_loaded() { add_filter( 'the_title', array( $this, 'the_title' ), 10, 2 ); add_action( 'init', array( $this, 'init' ), 5 ); add_action( 'omg', array( $this, 'is_really_tedious' ), 11, 3 ); } // AFTER function plugins_loaded() { $this->hook( 'the_title' ); $this->hook( 'init', 5 ); $this->hook( 'omg', 'is_really_tedious', 3 ); }
Defer actions
Options in an array
const OPTIONS = 'my_plugin_option_name'; function get_option( $key ) { $options = get_option( self::OPTIONS ); if ( isset( $options[$key] ) ) return $options[$key]; } function set_option( $key, $value ) { $options = get_option( self::OPTIONS ); $options[$key] = $value; update_option( self::OPTIONS, $options ); }
Plugins Repo
Community Karma
Professional Credibility
Easy reuse for you
SVN
svn checkout h p://plugins.svn.wordpress.org/{plugin-name} Plugin dev loop { svn up {hackity hack hack} svn add {new-files} svn commit -m '{Message about your changes}'
/trunk/ for development Tag your releases
/trunk/readme.txt specifies the stable tag Stable tag: 2.3
=== Your Plugin === Contributors: markjaquith, nacinbot Donate link: h p://example.com/paypal Tags: foo, bar Requires at least: 3.2 Tested up to: 3.3.1 Stable tag: 2.3 Here is a short description of the plugin. This should be no more than 150 characters. No markup here.
1. Tag in SVN 2. “Repoint” /trunk/readme.txt
Support forums wordpress.org/support/view/plugin-commi er/USERNAME
assets/banner-772x250.(jpg|png)
Sanity
Slow down on the options cowboyand/or-girl
Say hello to my li le friend:
Say hello to my li le friend: “no”
Encourage good behavior
Encourage g o o d behavior
Q&A Mark Jaquith “JAKE-with” @markjaquith mark@jaquith.me markjaquith.com

Creating and Maintaining WordPress Plugins