On: 2011/02/25
Shorter URL for this page: http://ozh.in/uh

Full Table of Content

Chapter 0: Foreword by a very famous WordPress rockstar

Chapter 1: An Introduction to Plugins

What Is a Plugin?

  • How Plugins Interact with WordPress
  • When Are Plugins Loaded?

Available Plugins

  • Official Plugin Directory
  • Popular Plugin Examples
  • Popular Plugin Tags

Advantages of Plugins

  • Not Modifying Core
  • Why Reinvent the Wheel
  • Separating Plugins and Themes
  • Easy Updates
  • Easier to Share and Reuse
  • Plugin Sandbox
  • Plugin Community

Installing and Managing Plugins

  • Installing a Plugin
  • Managing Plugins
  • Editing Plugins
  • Plugin Directories
  • Types of Plugins
  • Testing Plugin Functionality


Chapter 2: Plugin Foundation

Creating a Plugin File

  • Naming Your Plugin
  • Using a Folder

Sanity Practices

  • Prefix Everything
  • File Organization
  • Folder Structure

Header Requirements

  • Creating the Header
  • Plugin License

Determining Paths

  • Plugin Paths
  • Local Paths
  • URL Paths

Activate/Deactivate Functions

  • Plugin Activation Function
  • Create Default Settings on Activate
  • Plugin Deactivation Function
  • Deactivate Is Not Uninstall

Uninstall Methods

  • Why Uninstall Is Necessary
  • Uninstall.php
  • Uninstall Hook

Coding Standards

  • Document Your Code
  • Naming Variables, Functions, and Files
  • Single and Double Quotes
  • Indentation
  • Brace Style
  • Space Usage
  • Shorthand PHP
  • SQL Statements

Plugin Development Checklist


Chapter 3: Hooks


  • What Is an Action?
  • Action Hook Functions
  • Commonly Used Action Hooks


  • What Is a Filter?
  • Filter Hook Functions
  • Quick Return Functions
  • Commonly Used Filter Hooks

Using Hooks from Within a Class

Creating Custom Hooks

  • Benefits of Creating Custom Hooks
  • Custom Action Hook Example
  • Custom Filter Hook Example

How to Find Hooks

  • Searching for Hooks in the Core Code
  • Variable Hooks
  • Hook Reference Lists


Chapter 4: Integrating in WordPress

Adding Menus and Submenus

  • Creating a Top-Level Menu
  • Adding a Submenu
  • Adding a Menu Item to an Existing Menu

Creating Widgets

  • Creating a Widget
  • Advanced Widget
  • Creating Dashboard Widgets
  • Creating a Dashboard Widget with Options

Meta Boxes

  • What Is a Meta Box?
  • Adding a Custom Meta Box
  • Saving Meta Box Data
  • Advanced Meta Box

Keeping It Consistent

  • Using the WordPress UI
  • Headings
  • Icons
  • Messages
  • Buttons
  • Links
  • Form Fields
  • Tables
  • Pagination


Chapter 5: Internationalization

Internationalization and Localization

  • Why Internationalize?
  • Understanding Internationalization in Professional Work
  • Getting Your Plugin Ready for Translation
  • Echoing and Returning Strings
  • Using Placeholders
  • Internationalizing JavaScript

Creating Translation Files

  • The MO and PO Files
  • Translation Tools
  • How to Create a POT File
  • Where to Store Translation Files


Chapter 6: Plugin Security

Securing Your Plugin

  • What Securing Your Plugin Is
  • What Securing Your Plugin Is Not

User Permissions

  • How to Check current_user_can
  • Do Not Check Too Early


  • Authority Versus Intention
  • What Is a Nonce?
  • How to Create and Verify Nonces
  • Nonces in AJAX Scripts

Data Validation and Sanitization

  • The Need for Data Validation and Sanitization
  • Good Practice: Identifying Potentially Tainted Data
  • Validating or Sanitizing Input?
  • Validating and Sanitizing Cookbook

Formatting SQL Statements

  • The $wpdb Object
  • Why wpdb Methods Are Superior
  • All-in-One Methods
  • Common Methods
  • Protecting Queries Against SQL Injections
  • Miscellaneous wpdb Methods and Properties

Security Good Habits


Chapter 7: Plugin Settings

The Options API

  • Saving Options
  • Saving an Array of Options
  • Retrieving Options
  • Loading an Array of Options
  • Deleting Options
  • The Autoload Parameter

The Settings API

  • Benefits of the Settings API
  • Settings API Functions
  • Wrapping It Up: A Complete Plugin Management Page
  • Improving Feedback on Validation Errors
  • Adding Fields to an Existing Page

The Transients API

  • Saving an Expiring Option
  • Retrieving an Expiring Option
  • Deleting an Expiring Option
  • A Practical Example Using Transients
  • Technical Details and Tip
  • Transient Ideas

Saving Per-User Settings

  • Craft a Plugin
  • User Metadata
  • Saving User Metadata
  • Updating User Metadata
  • Getting User Metadata
  • Deleting User Metadata
  • Getting a User’s ID
  • Adding Input Fields to a Profile Page
  • BOJ’s Admin Lang Plugin
  • Per-User Settings: Best Practices

Storing Data in Custom Tables

  • Types of Data
  • WordPress’ Standard Tables
  • Creating a Custom Table
  • Updating the Structure of a Custom Table
  • dbDelta() Tips for Success
  • Accessing Your Custom Table


Chapter 8: Users

Working with Users

  • User Functions
  • Creating, Updating, and Deleting Users
  • User Data
  • User Metadata

Roles and Capabilities

  • What Are Roles and Capabilities?
  • Default Roles
  • Custom Roles

Limiting Access

  • Checking User Permissions
  • Is the User an Admin?
  • Allowing Custom Permissions

Customizing Roles

  • Creating a Role
  • Deleting a Role
  • Adding Capabilities to a Role
  • Removing Capabilities from a Role
  • A Custom Role and Capability Plugin


Chapter 9: HTTP API

HTTP Requests Crash Course

  • What Is an HTTP Request?
  • How to Make HTTP Requests in PHP

WordPress’ HTTP Functions

  • The wp_remote_ Functions
  • Advanced Configuration and Tips

Practice: Reading JSON from a Remote API

  • Getting and Reading JSON
  • Your Functional Plugin

Practice: Sending Data to a Remote API

  • Formatting Parameters for POST Requests
  • Your Functional Plugin

Practice: Reading Arbitrary Content

Make Your Own Plugin Repository

  • How Plugin Upgrades Work in WordPress
  • Polling an Alternative API from a Plugin
  • Building the Alternative API
  • A Few Words of Caution About Self-Hosted API

Special Case: Fetching Remote Feeds


Chapter 10: The Shortcode API

Creating Shortcodes

  • What Shortcodes Are
  • Register Custom Shortcodes

Shortcode Tips

  • Think Simplicity for the User
  • Remember the Dynamicity
  • Look Under the Hoods
  • A “bb code” for Comments Plugin
  • Shortcode Nesting Limitations

Integrating Google Maps

  • Accessing the Google Geocoding API
  • Storing API Results
  • Accessing the Google Maps API

More Shortcode Quick Ideas

  • Display Member-Only Content
  • Display Time-Limited Content
  • Obfuscate Email Addresses


Chapter 11: Extending Posts: Meta Data, Custom Post Types, and Taxonomies

Creating Custom Post Types

  • Post Type Possibilities
  • Registering a Post Type
  • Setting Post Type Labels
  • Using Custom Capabilities
  • Attaching Existing Taxonomies

Using Custom Post Types

  • Creating a Custom Post Type Loop
  • Retrieving Custom Post Type Content
  • Checking if Post Type Exists

Post Meta Data

  • Adding Post Meta Data
  • Retrieving Post Meta Data
  • Updating Post Meta Data
  • Deleting Post Meta Data

Creating Custom Taxonomies

  • Understanding Taxonomies
  • Registering a Custom Taxonomy
  • Assigning a Taxonomy to a Post Type

Using Custom Taxonomies

  • Retrieving a Taxonomy
  • Using a Taxonomy with Posts
  • Taxonomy Conditional Tags

A Post Type and Taxonomy Plugin


Chapter 12: JavaScript and Ajax in WordPress

jQuery–A Brief Introduction

  • Benefits of Using jQuery
  • jQuery Crash Course


  • What Is Ajax?
  • Ajax Best Practices

Adding JavaScript in WordPress

  • A Proper Way to Include Scripts
  • Where to Include Scripts
  • Adding Scripts Only When Needed
  • Dynamic Scripts in WordPress

Ajax in WordPress

  • Ajax in WordPress: Principles
  • A Complete Example: Instant “Read More” Links
  • Another Example: Frontend Comment Deletion
  • Debugging Ajax


Chapter 13: Cron

What Is Cron?

  • How Is Cron Executed?

Scheduling Cron Events

  • Scheduling a Recurring Event
  • Scheduling a Single Event
  • Unscheduling an Event
  • Specifying Your Own Cron Intervals
  • Viewing Cron Events Scheduled

True Cron

Practical Use

  • Deleting Post Revisions Weekly
  • The Blog Pester Plugin
  • The Delete Comments Plugin


Chapter 14: The Rewrite API

Why Rewrite URLs

  • Permalinks Principles
  • Apache’s mod_rewrite
  • URL Rewriting in WordPress

How WordPress Handles Queries

  • Overview of the Query Process
  • The rewrite Object
  • The query Object
  • What Plugins Can Do

Practical Uses

  • Rewriting a URL to Create a List of Shops
  • Creating a New Permalink Structure and Integrating Non-WordPress Pages
  • Adding an Endpoint and Altering Output Format
  • Adding a Custom Feed for the Latest Uploaded Images


Chapter 15: Multisite


  • WordPress Versus Multisite Network
  • Understanding Multisite Terminology
  • Advantages of Multisite

Enabling Multisite in WordPress

Multisite Functions

  • The Power of Blog ID
  • Common Functions
  • Switching and Restoring Sites
  • Network Content Shortcode Examples
  • A Network Content Widget Example
  • Creating a New Site
  • Multisite Site Options
  • Users in a Network
  • Multisite Super Admin
  • Checking the Site Owner
  • Network Stats

Multisite Database Schema

  • Multisite-Specific Tables
  • Site-Specific Tables


Chapter 16: Debugging and Optimizing

Supporting Old Versions (Not)

  • Keeping Current with WordPress Development
  • Deprecated Functions
  • Dealing with Obsolete Client Installs


  • Enabling Debugging
  • Displaying Debug Messages
  • Correcting Debug Messages

Error Logging

  • Enabling Logging
  • Setting Log File Location
  • Understanding the Log File


  • Saving, Loading, and Deleting Cached Data
  • Caching Data Within a Plugin


Chapter 17: Marketing Your Plugin

Choosing a License for Your Plugin

  • Different Options
  • Why It Matters
  • Making Money While Using the GPL

Submitting to WordPress.org

  • Creating an Account
  • Submitting a Plugin
  • Setting Up SVN
  • Creating a readme.txt File

Getting Your Plugin Renowned

  • Naming Your Plugin
  • Building a Web Site
  • Creating a Page for Your Plugin
  • Announcing Your Plugin
  • Supporting Your Plugins
  • Getting Feedback
  • Getting Out of the Basement
  • Other Promotion Methods


Chapter 18: The Developer Toolbox

Core as Reference

  • Inline Documentation
  • Finding Functions
  • Common Core Files


  • Searching the Codex
  • Function Reference

Tool Web Sites

  • PHPXref
  • Hooks Database

Community Resources

  • Support Forums
  • Mailing Lists
  • WordPress Chat
  • WordPress Development Updates
  • WordPress Ideas
  • Community News Sites
  • Local Events


  • Browser
  • Editor
  • Deploying Files with FTP, SFTP, and SSH
  • phpMyAdmin


Page: #1 #2 #3 #4 #5

Shorter URL

Want to share or tweet this page? Please use this short URL: http://ozh.in/uh


This page "Professional WordPress Plugin Development" was posted on 25/02/2011 at 6:34 pm
Watch this discussion : Comments RSS 2.0.

4 Blablas

  1. Xavier says:

    Sounds hefty, but tasty :)
    Can't wait to have a look at it!

  2. Just ordered the book on Amazon. Looking forward to getting it!
    Do you have also affiliate programs for selling this book?


  3. Ozh says:

    Maor Barazany » Amazon itself has an affiliate program which you can use to sell it

  4. Robert says:

    Bought your book after I read your article http://planetozh.com/blog/2009/09/top-10-most-common-coding-mistakes-in-wordpress-plugins/ – it was worth every cent of it – thanks for the huge amount of tipps & code examples!

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Gravatars: Curious about the little images next to each commenter's name ? Go to Gravatar and sign for a free account
Spam: Various spam plugins may be activated. I'll put pins in a Voodoo doll if you spam me.