Tải bản đầy đủ (.pdf) (554 trang)

wrox press professional wordpress plugin development

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (23.35 MB, 554 trang )


PROFESSIONAL
WORDPRESS® PLUGIN DEVELOPMENT
FOREWORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
CHAPTER 1 An Introduction to Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
CHAPTER 2 Plugin Foundation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
CHAPTER 3 Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
CHAPTER 4 Integrating in WordPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
CHAPTER 5 Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
CHAPTER 6 Plugin Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
CHAPTER 7 Plugin Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
CHAPTER 8 Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
CHAPTER 9 HTTP API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
CHAPTER 10 The Shortcode API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
CHAPTER 11 Extending Posts: Metadata, Custom Post Types,
and Taxonomies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
CHAPTER 12 JavaScript and Ajax in WordPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
CHAPTER 13 Cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
CHAPTER 14 The Rewrite API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
CHAPTER 15 Multisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
CHAPTER 16 Debugging and Optimizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
CHAPTER 17 Marketing Your Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
CHAPTER 18 The Developer Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511


PROFESSIONAL
WordPress® Plugin Development
Brad Williams


Ozh Richard
Justin Tadlock

Professional WordPress® Plugin Development
Published by
Wiley Publishing, Inc.
10475 Crosspoint Boulevard
Indianapolis, IN 46256
www.wiley.com
Copyright © 2011 by Wiley Publishing, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-0-470-91622-3
ISBN: 978-1-118-07530-2 (ebk)
ISBN: 978-1-118-07532-6 (ebk)
ISBN: 978-1-118-07531-9 (ebk)
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means,
electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108
of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization
through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers,
MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to
the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011,
fax (201) 748-6008, or online at />Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with
respect to the accuracy or completeness of the contents of this work and specifi cally disclaim all warranties, including
without limitation warranties of fi tness for a particular purpose. No warranty may be created or extended by sales or
promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work
is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional
services. If professional assistance is required, the services of a competent professional person should be sought. Neither
the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is

referred to in this work as a citation and/or a potential source of further information does not mean that the author or the
publisher endorses the information the organization or Web site may provide or recommendations it may make. Further,
readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this
work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department within the
United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available
in electronic books.
Library of Congress Control Number: 2011920897
Trademarks: Wiley, the Wiley logo, Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress
are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affi liates, in the United States and other
countries, and may not be used without written permission. WordPress is a registered trademark of Automattic, Inc. All
other trademarks are the property of their respective owners. Wiley Publishing, Inc., is not associated with any product
or vendor mentioned in this book.

To my Father, Robert “ Basket Bob ” Williams, for
inspiring me to become the man I am today.

— Brad Williams
To my wife Ariane for her support while I was
escaping household chores, and to my kids Oscar
and Cyrus who ’ ll be WordPress hackers in 10 years.
— Ozh Richard
To my family for allowing me to explore the
online world as a career path and the WordPress
community for inviting me in.
— Justin Tadlock

CREDITS
EXECUTIVE EDITOR

Carol Long
PROJECT EDITOR
Kelly Talbot
TECHNICAL EDITORS
Doug Vann
Andrew Nacin
PRODUCTION EDITOR
Rebecca Anderson
COPY EDITOR
Apostrophe Editing Services
EDITORIAL DIRECTOR
Robyn B. Siesky
EDITORIAL MANAGER
Mary Beth Wakefi eld
PRODUCTION MANAGER
Tim Tate
VICE PRESIDENT AND EXECUTIVE GROUP
PUBLISHER
Richard Swadley
VICE PRESIDENT AND EXECUTIVE PUBLISHER
Barry Pruett
ASSOCIATE PUBLISHER
Jim Minatel
PROJECT COORDINATOR, COVER
Katie Crocker
PROOFREADER
Jen Larsen, Word One New York
INDEXER
Johnna VanHoose Dinse
COVER DESIGNER

Michael E. Trent
COVER PHOTO
© pagadesign/istockphoto.com

ABOUT THE AUTHORS
BRAD WILLIAMS is the CEO and co - founder of WebDevStudios.com. He is also a co - host on the
SitePoint podcast and the co - author of Professional WordPress . Brad has been developing websites
for more than 14 years, including the last 4 where he has focused on open - source technologies like
WordPress. Brad has given presentations at various WordCamps across the country, is the orga-
nizer for the New Jersey and Philadelphia WordPress Meetups and WordCamp Philly. In 2010 Brad
founded Pluginize.com, a company dedicated to building custom WordPress plugins.
OZH RICHARD is a web developer who started to use WordPress at version 1.0.1, published his fi rst
WordPress-powered website in May 2004, and released his fi rst plugin three months later. He has
since developed several popular plugins, won an Annual WordPress Plugin Competition, and is now
an offi cial judge. When not coding WordPress plugins or sharing tutorials, Ozh contributes to other
Open Source projects such as YOURLS, a self - hosted URL shortener, or plays Quake. You can fi nd
Ozh online at
.
JUSTIN TADLOCK is a Web developer and designer who coded his fi rst Web page in 2003 at the
age of 18, only months after getting his fi rst computer. He found WordPress in 2005 and has
been working with and contributing to the platform ever since. He has developed many popular
WordPress plugins and themes while exploring several business paths using the open - source
platform.

AC K N O W LEDG M ENT S
THANK YOU to the love of my life, April, for your endless support, friendship, and continuing to
put up with my nerdy ways. Thank you to my awesome nieces, Indiana Brooke and Austin
Margaret. Thank you Carol Long for believing in this book idea and helping make it a reality.
To Ozh and Justin, two amazing co - authors, your knowledge of WordPress is unmatched, and
this book wouldn ’ t have been what it is without you both. Thank you to the entire WordPress

community for your support, friendships, motivation, and guidance. Thank you fi zzypop for
making WordCamp after parties the stuff of legend. Last but not least thank you to my ridiculous
zoo: Lecter, Clarice, and Squeaks the Cat (aka Kitty Galore). Your smiling faces and wiggly butts
always put a smile on my face.
— Brad Williams
IT ’ S BEEN A LONG TIME in the WordPress community since I fi rst started to dissect the few plugins
that began to pop like daisies in 2004 and tried to understand how things worked. To all the coders
who released the code that taught me the innards of WordPress, I can ’ t express how much I owe you.
To all the members of the WordPress community who don ’ t write code but foster the creativity and
water our community, thank you for your invaluable dedication. To Brad, who sent me that crazy
proposal about a plugin book, I hope I ’ ll cross the oceans one day to have a few beers with you. To
Ronnie James Dio, Tom Araya, Bruce Dickinson, Blaze Bayley, Lemmy Kilmister, Dave Mustaine,
Rob Zombie, Till Lindemann, and Mike Muir, whose gentle voices have lulled me and inspired me
while I was writing late at night.
— Ozh Richard
THE WORDPRESS COMMUNITY took me in as a lost kid who was trying to fi gure out life and
presented me with opportunities that I ’ d never dreamed possible. A simple “ thank you ” is an
understatement. To my plugin and theme users, you continue to inspire me and keep my skills sharp
with your invaluable feedback and loyalty. To Brad, thank you for that oddly random email about
writing a plugin book. To Ozh, thank you for coding all those cool plugins I learned from before
becoming a developer myself. To Granny, thank you for allowing me to skip several dinners to work
on this book. To my family and friends, thank you for supporting me and showing superhuman
patience during hour - long conversations (i.e., crazed rants) about plugin development. Most
importantly, to my father, who knows nothing about Web development but taught me everything
about being successful and continues to teach me today.
— Justin Tadlock

CONTENTS
FOREWORD xxi
INTRODUCTION xxiii

CHAPTER 1: AN INTRODUCTION TO PLUGINS 1
What Is a Plugin? 1
How Plugins Interact with WordPress 2
When Are Plugins Loaded? 3
Available Plugins 3
O cial Plugin Directory 3
Popular Plugin Examples 4
Popular Plugin Tags 4
Advantages of Plugins 5
Not Modifying Core 5
Why Reinvent the Wheel 5
Separating Plugins and Themes 6
Easy Updates 6
Easier to Share and Reuse 7
Plugin Sandbox 7
Plugin Community 7
Installing and Managing Plugins 7
Installing a Plugin 7
Managing Plugins 8
Editing Plugins 8
Plugin Directories 8
Types of Plugins 9
Testing Plugin Functionality 10
Summary 10
CHAPTER 2: PLUGIN FOUNDATION 11
Creating a Plugin File 11
Naming Your Plugin 11
Using a Folder 12
Sanity Practices 12
Prefi x Everything 12

File Organization 13
Folder Structure 13

CONTENTS
x
Header Requirements 14
Creating the Header 14
Plugin License 15
Determining Paths 15
Plugin Paths 15
Local Paths 16
URL Paths 17
Activate/Deactivate Functions 18
Plugin Activation Function 18
Create Default Settings on Activate 19
Plugin Deactivation Function 19
Deactivate Is Not Uninstall 20
Uninstall Methods 20
Why Uninstall Is Necessary 20
Uninstall.php 21
Uninstall Hook 21
Coding Standards 22
Document Your Code 23
Naming Variables, Functions, and Files 23
Single and Double Quotes 24
Indentation 24
Brace Style 25
Space Usage 25
Shorthand PHP 26
SQL Statements 26

Plugin Development Checklist 26
Summary 27
CHAPTER 3: HOOKS 29
Actions 30
What Is an Action? 31
Action Hook Functions 32
Commonly Used Action Hooks 36
Filters 39
What Is a Filter? 40
Filter Hook Functions 41
Quick Return Functions 46
Commonly Used Filter Hooks 47
Using Hooks from Within a Class 51
Creating Custom Hooks 52
Benefi ts of Creating Custom Hooks 53

CONTENTS
xi
Custom Action Hook Example 53
Custom Filter Hook Example 54
How to Find Hooks 55
Searching for Hooks in the Core Code 56
Variable Hooks 56
Hook Reference Lists 56
Summary 57
CHAPTER 4: INTEGRATING IN WORDPRESS 59
Adding Menus and Submenus 59
Creating a Top-Level Menu 60
Adding a Submenu 61
Adding a Menu Item to an Existing Menu 62

Creating Widgets 63
Creating a Widget 63
Advanced Widget 68
Creating Dashboard Widgets 74
Creating a Dashboard Widget with Options 75
Meta Boxes 79
Adding a Custom Meta Box 79
Saving Meta Box Data 80
Advanced Meta Box 84
Keeping It Consistent 90
Using the WordPress UI 90
Headings 90
Icons 91
Messages 91
Buttons 92
Links 93
Form Fields 93
Tables 94
Pagination 95
Summary 96
CHAPTER 5: INTERNATIONALIZATION 97
Internationalization and Localization 97
Why Internationalize? 98
Understanding Internationalization in Professional Work 98
Getting Your Plugin Ready for Translation 99
Echoing and Returning Strings 99

CONTENTS
xii
Using Placeholders 108

Internationalizing JavaScript 110
Creating Translation Files 113
The MO and PO Files 113
Translation Tools 113
How to Create a POT File 114
Where to Store Translation Files 115
Summary 115
CHAPTER 6: PLUGIN SECURITY 117
Securing Your Plugin 117
What Securing Your Plugin Is 118
What Securing Your Plugin Is Not 118
User Permissions 118
How to Check current_user_can() 118
Do Not Check Too Early 119
Nonces 120
Authority Versus Intention 120
What Is a Nonce? 121
How to Create and Verify Nonces 122
Nonces in Ajax Scripts 127
Data Validation and Sanitization 127
The Need for Data Validation and Sanitization 127
Good Practice: Identifying Potentially Tainted Data 129
Validating or Sanitizing Input? 130
Validating and Sanitizing Cookbook 131
Formatting SQL Statements 149
The $wpdb Object 149
Why wpdb Methods Are Superior 150
All-in-One Methods 151
Common Methods 153
Protecting Queries Against SQL Injections 157

Miscellaneous wpdb Methods and Properties 159
Security Good Habits 160
Summary 161
CHAPTER 7: PLUGIN SETTINGS 163
The Options API 163
Saving Options 164
Saving an Array of Options 164
Retrieving Options 165

CONTENTS
xiii
Loading an Array of Options 166
Deleting Options 167
The Autoload Parameter 167
The Settings API 169
Benefi ts of the Settings API 169
Settings API Functions 169
Wrapping It Up: A Complete Plugin Management Page 174
Improving Feedback on Validation Errors 176
Adding Fields to an Existing Page 177
The Transients API 180
Saving an Expiring Option 181
Retrieving an Expiring Option 181
Deleting an Expiring Option 181
A Practical Example Using Transients 182
Technical Details 182
Transient Ideas 183
Saving Per-User Settings 183
Crafting a Plugin 183
User Metadata 183

Saving User Metadata 184
Updating User Metadata 184
Getting User Metadata 185
Deleting User Metadata 185
Getting a User’s ID 186
Adding Input Fields to a Profi le Page 186
BOJ’s Admin Lang Plugin 188
Per-User Settings: Best Practices 190
Storing Data in Custom Tables 191
Types of Data 191
WordPress’ Standard Tables 191
Creating a Custom Table 191
Updating the Structure of a Custom Table 193
dbDelta() Tips for Success 194
Accessing Your Custom Table 196
Summary 196
CHAPTER 8: USERS 197
Working with Users 198
User Functions 198
Creating, Updating, and Deleting Users 202
User Data 207

CONTENTS
xiv
User Metadata 212
Roles and Capabilities 219
What Are Roles and Capabilities? 220
Default Roles 220
Custom Roles 221
Limiting Access 221

Checking User Permissions 222
Is the User an Admin? 226
Allowing Custom Permissions 227
Customizing Roles 229
Creating a Role 229
Deleting a Role 230
Adding Capabilities to a Role 231
Removing Capabilities from a Role 232
A Custom Role and Capability Plugin 233
Summary 236
CHAPTER 9: HTTP API 237
HTTP Requests Crash Course 237
What Is an HTTP Request? 237
How to Make HTTP Requests in PHP 240
WordPress’ HTTP Functions 242
The wp_remote_ Functions 242
Advanced Confi guration and Tips 248
Practice: Reading JSON from a Remote API 255
Getting and Reading JSON 256
Your Functional Plugin 257
Practice: Sending Data to a Remote API 259
Formatting Parameters for POST Requests 259
Your Functional Plugin 260
Practice: Reading Arbitrary Content 262
Make Your Own Plugin Repository 263
How Plugin Upgrades Work in WordPress 263
Polling an Alternative API from a Plugin 264
Building the Alternative API 268
A Few Words of Caution About Self-Hosted API 269
Special Case: Fetching Remote Feeds 269

Summary 270
CHAPTER 10: THE SHORTCODE API 271
Creating Shortcodes 271
What Shortcodes Are 271

CONTENTS
xv
Register Custom Shortcodes 273
Shortcode Tips 277
Think Simplicity for the User 277
Remember the Dynamicity 280
Look Under the Hoods 281
A “bb code” for Comments Plugin 283
Shortcode Nesting Limitations 286
Integrating Google Maps 286
Accessing the Google Geocoding API 287
Storing API Results 288
Accessing the Google Maps API 290
More Shortcode Quick Ideas 295
Display Member-Only Content 295
Display Time-Limited Content 296
Obfuscate Email Addresses 296
Summary 297
CHAPTER 11: EXTENDING POSTS: METADATA,
CUSTOM POST TYPES, AND TAXONOMIES 299
Creating Custom Post Types 300
Post Type Possibilities 300
Registering a Post Type 300
Setting Post Type Labels 305
Using Custom Capabilities 306

Attaching Existing Taxonomies 308
Using Custom Post Types 309
Creating a Custom Post Type Loop 309
Retrieving Custom Post Type Content 311
Checking if a Post Type Exists 312
Post Metadata 313
Adding Post Metadata 314
Retrieving Post Metadata 315
Updating Post Metadata 316
Deleting Post Metadata 317
Creating Custom Taxonomies 318
Understanding Taxonomies 318
Registering a Custom Taxonomy 319
Assigning a Taxonomy to a Post Type 323
Using Custom Taxonomies 324
Retrieving a Taxonomy 324
Using a Taxonomy with Posts 325
Taxonomy Conditional Tags 327

CONTENTS
xvi
A Post Type and Taxonomy Plugin 329
Summary 332
CHAPTER 12: JAVASCRIPT AND AJAX IN WORDPRESS 333
jQuery–A Brief Introduction 333
Benefi ts of Using jQuery 334
jQuery Crash Course 334
Ajax 337
What Is Ajax? 338
Ajax Best Practices 341

Adding JavaScript in WordPress 341
A Proper Way to Include Scripts 341
Where to Include Scripts 348
Adding Scripts Only When Needed 350
Dynamic Scripts in WordPress 354
Ajax in WordPress 358
Ajax in WordPress: Principles 358
A Complete Example: Instant “Read More” Links 360
Another Example: Frontend Comment Deletion 367
Debugging Ajax 372
Summary 373
CHAPTER 13: CRON 375
What Is Cron? 375
How Is Cron Executed? 375
Scheduling Cron Events 376
Scheduling a Recurring Event 376
Scheduling a Single Event 379
Unscheduling an Event 381
Specifying Your Own Cron Intervals 382
Viewing Cron Events Scheduled 382
True Cron 386
Practical Use 386
Deleting Post Revisions Weekly 386
The Blog Pester Plugin 391
The Delete Comments Plugin 395
Summary 401
CHAPTER 14: THE REWRITE API 403
Why Rewrite URLs 403
Permalink Principles 404


CONTENTS
xvii
Apache’s mod_rewrite 404
URL Rewriting in WordPress 405
How WordPress Handles Queries 406
Overview of the Query Process 406
The rewrite Object 407
The query Object 407
What Plugins Can Do 408
Practical Uses 408
Rewriting a URL to Create a List of Shops 408
Creating a New Permalink Structure and Integrating
Non-WordPress Pages 415
Adding an Endpoint and Altering Output Format 417
Adding a Custom Feed for the Latest Uploaded Images 421
Summary 423
CHAPTER 15: MULTISITE 425
Di erences 426
WordPress Versus Multisite Network 426
Understanding Multisite Terminology 426
Advantages of Multisite 427
Enabling Multisite in WordPress 427
Multisite Functions 428
The Power of Blog ID 428
Common Functions 429
Switching and Restoring Sites 431
Network Content Shortcode Examples 434
A Network Content Widget Example 440
Creating a New Site 446
Multisite Site Options 452

Users in a Network 453
Multisite Super Admin 457
Checking the Site Owner 458
Network Stats 459
Multisite Database Schema 460
Multisite-Specifi c Tables 460
Site-Specifi c Tables 460
Summary 461
CHAPTER 16: DEBUGGING AND OPTIMIZING 463
Supporting Old Versions (Not) 463
Keeping Current with WordPress Development 464
CONTENTS
xviii
Deprecated Functions 465
Dealing with Obsolete Client Installs 466
Debugging 466
Enabling Debugging 467
Displaying Debug Messages 467
Correcting Debug Messages 468
Error Logging 472
Enabling Logging 472
Setting Log File Location 473
Understanding the Log File 473
Caching 473
Saving, Loading, and Deleting Cached Data 474
Caching Data Within a Plugin 475
Summary 477
CHAPTER 17: MARKETING YOUR PLUGIN 479
Choosing a License for Your Plugin 480
Di erent Options 480

Why It Matters 481
Making Money While Using the GPL 482
Submitting to WordPress.org 482
Creating an Account 484
Submitting a Plugin 484
Setting Up SVN 485
Creating a readme.txt File 486
Getting Your Plugin Renowned 489
Naming Your Plugin 489
Building a Web Site 491
Creating a Page for Your Plugin 492
Announcing Your Plugin 493
Supporting Your Plugins 493
Getting Feedback 494
Getting Out of the Basement 495
Other Promotion Methods 495
Summary 496
CHAPTER 18: THE DEVELOPER TOOLBOX 497
Core as Reference 497
Inline Documentation 497
Finding Functions 499
Common Core Files 499

CONTENTS
xix
Codex 501
Searching the Codex 501
Function Reference 501
Tool Web Sites 502
PHPXref 502

Hooks Database 503
Community Resources 503
Support Forums 503
Mailing Lists 504
WordPress Chat 504
WordPress Development Updates 505
WordPress Ideas 505
Community News Sites 505
Local Events 506
Tools 507
Browser 507
Editor 507
Deploying Files with FTP, SFTP, and SSH 508
phpMyAdmin 508
Summary 509
INDEX 511


FOREWORD
STARTING OUT as a simple blogging system, over the last few years WordPress has morphed into
a fully featured and widely used content management system. It offers individuals and companies
world-wide a free and open-source alternative to closed-source and often very expensive systems.
When I say fully featured, that’s really only true because of the ability to add any functionality
needed in the form of a plugin. The core of WordPress is simple: You add in functionality with
plugins as you need it. Developing plugins allows you to stand on the shoulders of a giant: You
can showcase your specifi c area of expertise and help users benefi t while not having to deal with
parts of WordPress you don’t care or know about.
I’ve written dozens of plugins, which together have been downloaded millions of times. Doing that
has changed my life. It has helped me build out a business for myself, doing development and (SEO)
consultancy work. This is in your outreach too!

I wish that when I started developing plugins for WordPress as a hobby, some fi ve years back,
this book had been around. It would have saved me countless hours of digging through code and
half-fi nished documentation. I always ended up redoing pieces because I’d found yet another best
practice or simply an easier way of doing things.
Although this book didn’t exist yet, the authors of this book have always been a source of good
information for me while developing my plugins. Each of them is an expert in his own right;
together they are one of the best teams that could have been gathered to write this book.
WordPress makes it easy for people to have their say through words, sound, and visuals. For
those who write code, WordPress allows you to express yourself in code. And it’s simple. Anyone
can write a WordPress plugin. With this guide in hand, you can write a plugin that is true to
WordPress’ original vision: Code is Poetry.
Happy coding!
Joost de Valk
Yoast.com


INTRODUCTION
DEAR READER, thank you for picking up this book! You have probably heard about WordPress
already, the most popular self - hosted content management system (CMS) and blogging software in
use today. WordPress powers literally millions of Web sites on the Internet, including high profi le
sites such as TechCrunch and CNN ’ s blog. What makes WordPress so popular is that it ’ s free, open
source, and extendable beyond limits. Thanks to a powerful, architecturally sound, and easy - to - use
plugin system, you can customize how WordPress works and extend its functionalities. There are
already more than ten thousand plugins freely available in the offi cial plugin repository, but they
won ’ t suit all your needs or client requests. That ’ s where this book comes in handy!
As of this writing, we (Brad, Ozh, and Justin), have publicly released 50 plugins, which have been
downloaded nearly one million times, and that ’ s not counting private client work. This is a precious
combined experience that we are going to leverage to teach you how to code your own plugins for
WordPress by taking a hands - on approach with practical examples and real life situations you will
encounter with your clients.

The primary reason we wanted to write this book is to create a preeminent resource for WordPress
plugin developers. When creating plugins for WordPress, it can be a challenge to fi nd the resources
needed in a single place. Many of the online tutorials and guides are outdated and recommend
incorrect methods for plugin development. This book is one of the most extensive collections of
plugin development information to date and should be considered required reading for anyone
wanting to explore WordPress plugin development from the ground up.
WHO THIS BOOK IS FOR
This book is for professional Web developers who want to make WordPress work exactly how they
and their clients want. WordPress has already proven an exceptional platform for building any type
of site from simple static pages to networks of full - featured communities. Learning how to code
plugins will help you get the most out of WordPress and have a cost - effective approach to developing
per - client features.
This book is also for the code freelancers who want to broaden their skill portfolio, understand the
inner workings of WordPress functionality, and take on WordPress gigs. Since WordPress is the
most popular software to code and power websites, it is crucial that you understand how things run
under the hood and how you can make the engine work your way. Learning how to code plugins
will be a priceless asset to add to your resume and business card.
Finally, this book is for hobbyist PHP programmers who want to tinker with how their WordPress
blog works, discover the infi nite potential of lean and fl exible source code, and how they can
interact with the fl ow of events. The beauty of open source is that it ’ s easy to learn from and easy to
give back in turn. This book will help you take your fi rst step into a community that will welcome
your creativity and contribution.

×