{"id":1649,"date":"2011-02-25T18:34:29","date_gmt":"2011-02-25T16:34:29","guid":{"rendered":"http:\/\/planetozh.com\/blog\/?page_id=1649"},"modified":"2011-03-11T00:07:54","modified_gmt":"2011-03-10T22:07:54","slug":"professional-wordpress-plugin-development","status":"publish","type":"page","link":"https:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/","title":{"rendered":"Professional WordPress Plugin Development"},"content":{"rendered":"<p><a href=\"http:\/\/amzn.to\/plugindevbook\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1650\" title=\"plugindevbook\" src=\"http:\/\/planetozh.com\/blog\/wp-content\/uploads\/2011\/02\/plugindevbook1.jpg\" alt=\"\" width=\"140\" height=\"176\" \/><\/a> I wrote a book about WordPress Plugin Development, along with WordPress rockstars <a href=\"http:\/\/www.strangework.com\/\">Brad Williams<\/a> and <a href=\"http:\/\/justintadlock.com\/\">Justin Tadlock<\/a>.<\/p>\n<p>The book is available as <a href=\"http:\/\/amzn.to\/plugindevbook\">paperback<\/a>, DRM-free <a href=\"http:\/\/bit.ly\/plugindevebook\">ebook<\/a> and <a href=\"http:\/\/amzn.to\/plugindevbook\">Kindle<\/a>.<\/p>\n<p>This page describes the book, its intended audience and its content, in the following short pages:<\/p>\n<ol>\n<li><a href=\"http:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/\">intro<\/a>, here, duh<\/li>\n<li><a href=\"http:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/2\/\">Overview of the book<\/a>. Skip if you know what a WordPress plugin is.<\/li>\n<li><a href=\"http:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/3\/\">Who this book is for<\/a>. Read to make sure that book is for you<\/li>\n<li><a href=\"http:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/4\/\">TOC Short Overview<\/a>: chapter titles, so you know what this is about<\/li>\n<li><a href=\"http:\/\/planetozh.com\/blog\/books\/professional-wordpress-plugin-development\/5\/\">Full detailed TOC<\/a> including section titles: loooong page. But hey, the book *is* hefty:)<\/li>\n<\/ol>\n<p>Honestly? Honestly, this book is a plugin developer&#39;s wet dream :)<\/p>\n<p><!--nextpage--><\/p>\n<h2>Overview of Professional WordPress Plugin Development<\/h2>\n<p>As one of the most popular open source content management systems available today, <strong>WordPress<\/strong> boasts a framework that allows you to easily customize and extend it through <strong>plugins<\/strong>. This comprehensive book shows you how plugins work, reviews the tools and APIs available in WordPress, and demonstrates how to extend the functionality of WordPress with plugins.<\/p>\n<p>The trio of established authors provides a <strong>practical<\/strong>, solutions-based approach along with a collection of timely examples and <strong>plenty of code<\/strong>, all aimed at clearly explaining how to create a plugin file, work with users, integrate widgets, add menus and submenus, secure your plugins, and more. You will quickly come to understand how to develop custom plugins so that you can take WordPress to the next corporate and enterprise level.<\/p>\n<p>Professional WordPress Plugin Development:<\/p>\n<ul>\n<li> Details the range of complexity in plugins, from a very simple plugin to an extremely elaborate social network package<\/li>\n<li> Addresses how to integrate into WordPress, save settings, create widgets and shortcodes, and implement uninstall<\/li>\n<li> Learn the proper techniques for storing data, customizing user roles, and security best practices<\/li>\n<li> Shares techniques for using custom post types and creating and using custom taxonomies<\/li>\n<li> How to create plugins for WordPress Multisite networks<\/li>\n<li> Integrate user and role management<\/li>\n<li> Explores the HTTP API, JavaScript and AJAX, Cron, the Rewrite API, and more<\/li>\n<\/ul>\n<p><!--nextpage--><\/p>\n<h2>Who this book is for<\/h2>\n<p>Professional WordPress Plugin Development is for <strong>professional Web developers<\/strong> 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.<\/p>\n<p>This book is also for the <strong>code freelancers<\/strong> 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.<\/p>\n<p>Finally, this book is for <strong>hobbyist PHP programmers<\/strong> who want to tinker with how their WordPress blog works, discover the infinite potential of lean and flexible source code, and how they can interact with the fl ow of events. The beauty of open source is that it&#39;s easy to learn from and easy to give back in turn. This book will help you take your first step into a community that will welcome your creativity and contribution.<\/p>\n<p><!--nextpage--><\/p>\n<h2>Table of Content (Overview)<\/h2>\n<p>The book features 18 chapters:<\/p>\n<ol start=\"0\">\n<li>Foreword by a very famous WordPress rockstar<\/li>\n<li>An Introduction to Plugins<\/li>\n<li>Plugin Foundation<\/li>\n<li>Hooks<\/li>\n<li>Integrating in WordPress<\/li>\n<li>Internationalization<\/li>\n<li>Plugin Security<\/li>\n<li>Plugin Settings<\/li>\n<li>Users<\/li>\n<li>HTTP API<\/li>\n<li>The Shortcode API<\/li>\n<li>Meta Data, Custom Post Types, and Taxonomies<\/li>\n<li>JavaScript and Ajax in WordPress<\/li>\n<li>Cron<\/li>\n<li>The Rewrite API<\/li>\n<li>Multisite<\/li>\n<li>Debugging and Optimizing<\/li>\n<li>Marketing Your Plugin<\/li>\n<li>The Developer Toolbox<\/li>\n<\/ol>\n<p><!--nextpage--><\/p>\n<h2>Full Table of Content<\/h2>\n<h3>Chapter 0: Foreword by a very famous WordPress rockstar<\/h3>\n<h3>Chapter 1: An Introduction to Plugins<\/h3>\n<h4>What Is a Plugin?<\/h4>\n<ul>\n<li>How Plugins Interact with WordPress<\/li>\n<li>When Are Plugins Loaded?<\/li>\n<\/ul>\n<h4>Available Plugins<\/h4>\n<ul>\n<li>Official Plugin Directory<\/li>\n<li>Popular Plugin Examples<\/li>\n<li>Popular Plugin Tags<\/li>\n<\/ul>\n<h4>Advantages of Plugins<\/h4>\n<ul>\n<li>Not Modifying Core<\/li>\n<li>Why Reinvent the Wheel<\/li>\n<li>Separating Plugins and Themes<\/li>\n<li>Easy Updates<\/li>\n<li>Easier to Share and Reuse<\/li>\n<li>Plugin Sandbox<\/li>\n<li>Plugin Community<\/li>\n<\/ul>\n<h4>Installing and Managing Plugins<\/h4>\n<ul>\n<li>Installing a Plugin<\/li>\n<li>Managing Plugins<\/li>\n<li>Editing Plugins<\/li>\n<li>Plugin Directories<\/li>\n<li>Types of Plugins<\/li>\n<li>Testing Plugin Functionality<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 2: Plugin Foundation<\/h3>\n<h4>Creating a Plugin File<\/h4>\n<ul>\n<li>Naming Your Plugin<\/li>\n<li>Using a Folder<\/li>\n<\/ul>\n<h4>Sanity Practices<\/h4>\n<ul>\n<li>Prefix Everything<\/li>\n<li>File Organization<\/li>\n<li>Folder Structure<\/li>\n<\/ul>\n<h4>Header Requirements<\/h4>\n<ul>\n<li>Creating the Header<\/li>\n<li>Plugin License<\/li>\n<\/ul>\n<h4>Determining Paths<\/h4>\n<ul>\n<li>Plugin Paths<\/li>\n<li>Local Paths<\/li>\n<li>URL Paths<\/li>\n<\/ul>\n<h4>Activate\/Deactivate Functions<\/h4>\n<ul>\n<li>Plugin Activation Function<\/li>\n<li>Create Default Settings on Activate<\/li>\n<li>Plugin Deactivation Function<\/li>\n<li>Deactivate Is Not Uninstall<\/li>\n<\/ul>\n<h4>Uninstall Methods<\/h4>\n<ul>\n<li>Why Uninstall Is Necessary<\/li>\n<li>Uninstall.php<\/li>\n<li>Uninstall Hook<\/li>\n<\/ul>\n<h4>Coding Standards<\/h4>\n<ul>\n<li>Document Your Code<\/li>\n<li>Naming Variables, Functions, and Files<\/li>\n<li>Single and Double Quotes<\/li>\n<li>Indentation<\/li>\n<li>Brace Style<\/li>\n<li>Space Usage<\/li>\n<li>Shorthand PHP<\/li>\n<li>SQL Statements<\/li>\n<\/ul>\n<h4>Plugin Development Checklist<\/h4>\n<h4>Summary<\/h4>\n<h3>Chapter 3: Hooks<\/h3>\n<h4>Actions<\/h4>\n<ul>\n<li>What Is an Action?<\/li>\n<li>Action Hook Functions<\/li>\n<li>Commonly Used Action Hooks<\/li>\n<\/ul>\n<h4>Filters<\/h4>\n<ul>\n<li>What Is a Filter?<\/li>\n<li>Filter Hook Functions<\/li>\n<li>Quick Return Functions<\/li>\n<li>Commonly Used Filter Hooks<\/li>\n<\/ul>\n<h4>Using Hooks from Within a Class<\/h4>\n<h4>Creating Custom Hooks<\/h4>\n<ul>\n<li>Benefits of Creating Custom Hooks<\/li>\n<li>Custom Action Hook Example<\/li>\n<li>Custom Filter Hook Example<\/li>\n<\/ul>\n<h4>How to Find Hooks<\/h4>\n<ul>\n<li>Searching for Hooks in the Core Code<\/li>\n<li>Variable Hooks<\/li>\n<li>Hook Reference Lists<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 4: Integrating in WordPress<\/h3>\n<h4>Adding Menus and Submenus<\/h4>\n<ul>\n<li>Creating a Top-Level Menu<\/li>\n<li>Adding a Submenu<\/li>\n<li>Adding a Menu Item to an Existing Menu<\/li>\n<\/ul>\n<h4>Creating Widgets<\/h4>\n<ul>\n<li>Creating a Widget<\/li>\n<li>Advanced Widget<\/li>\n<li>Creating Dashboard Widgets<\/li>\n<li>Creating a Dashboard Widget with Options<\/li>\n<\/ul>\n<h4>Meta Boxes<\/h4>\n<ul>\n<li>What Is a Meta Box?<\/li>\n<li>Adding a Custom Meta Box<\/li>\n<li>Saving Meta Box Data<\/li>\n<li>Advanced Meta Box<\/li>\n<\/ul>\n<h4>Keeping It Consistent<\/h4>\n<ul>\n<li>Using the WordPress UI<\/li>\n<li>Headings<\/li>\n<li>Icons<\/li>\n<li>Messages<\/li>\n<li>Buttons<\/li>\n<li>Links<\/li>\n<li>Form Fields<\/li>\n<li>Tables<\/li>\n<li>Pagination<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 5: Internationalization<\/h3>\n<h4>Internationalization and Localization<\/h4>\n<ul>\n<li>Why Internationalize?<\/li>\n<li>Understanding Internationalization in Professional Work<\/li>\n<li>Getting Your Plugin Ready for Translation<\/li>\n<li>Echoing and Returning Strings<\/li>\n<li>Using Placeholders<\/li>\n<li>Internationalizing JavaScript<\/li>\n<\/ul>\n<h4>Creating Translation Files<\/h4>\n<ul>\n<li>The MO and PO Files<\/li>\n<li>Translation Tools<\/li>\n<li>How to Create a POT File<\/li>\n<li>Where to Store Translation Files<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 6: Plugin Security<\/h3>\n<h4>Securing Your Plugin<\/h4>\n<ul>\n<li>What Securing Your Plugin Is<\/li>\n<li>What Securing Your Plugin Is Not<\/li>\n<\/ul>\n<h4>User Permissions<\/h4>\n<ul>\n<li>How to Check current_user_can<\/li>\n<li>Do Not Check Too Early<\/li>\n<\/ul>\n<h4>Nonces<\/h4>\n<ul>\n<li>Authority Versus Intention<\/li>\n<li>What Is a Nonce?<\/li>\n<li>How to Create and Verify Nonces<\/li>\n<li>Nonces in AJAX Scripts<\/li>\n<\/ul>\n<h4>Data Validation and Sanitization<\/h4>\n<ul>\n<li>The Need for Data Validation and Sanitization<\/li>\n<li>Good Practice: Identifying Potentially Tainted Data<\/li>\n<li>Validating or Sanitizing Input?<\/li>\n<li>Validating and Sanitizing Cookbook<\/li>\n<\/ul>\n<h4>Formatting SQL Statements<\/h4>\n<ul>\n<li>The $wpdb Object<\/li>\n<li>Why wpdb Methods Are Superior<\/li>\n<li>All-in-One Methods<\/li>\n<li>Common Methods<\/li>\n<li>Protecting Queries Against SQL Injections<\/li>\n<li>Miscellaneous wpdb Methods and Properties<\/li>\n<\/ul>\n<h4>Security Good Habits<\/h4>\n<h4>Summary<\/h4>\n<h3>Chapter 7: Plugin Settings<\/h3>\n<h4>The Options API<\/h4>\n<ul>\n<li>Saving Options<\/li>\n<li>Saving an Array of Options<\/li>\n<li>Retrieving Options<\/li>\n<li>Loading an Array of Options<\/li>\n<li>Deleting Options<\/li>\n<li>The Autoload Parameter<\/li>\n<\/ul>\n<h4>The Settings API<\/h4>\n<ul>\n<li>Benefits of the Settings API<\/li>\n<li>Settings API Functions<\/li>\n<li>Wrapping It Up: A Complete Plugin Management Page<\/li>\n<li>Improving Feedback on Validation Errors<\/li>\n<li>Adding Fields to an Existing Page<\/li>\n<\/ul>\n<h4>The Transients API<\/h4>\n<ul>\n<li>Saving an Expiring Option<\/li>\n<li>Retrieving an Expiring Option<\/li>\n<li>Deleting an Expiring Option<\/li>\n<li>A Practical Example Using Transients<\/li>\n<li>Technical Details and Tip<\/li>\n<li>Transient Ideas<\/li>\n<\/ul>\n<h4>Saving Per-User Settings<\/h4>\n<ul>\n<li>Craft a Plugin<\/li>\n<li>User Metadata<\/li>\n<li>Saving User Metadata<\/li>\n<li>Updating User Metadata<\/li>\n<li>Getting User Metadata<\/li>\n<li>Deleting User Metadata<\/li>\n<li>Getting a User\u2019s ID<\/li>\n<li>Adding Input Fields to a Profile Page<\/li>\n<li>BOJ\u2019s Admin Lang Plugin<\/li>\n<li>Per-User Settings: Best Practices<\/li>\n<\/ul>\n<h4>Storing Data in Custom Tables<\/h4>\n<ul>\n<li>Types of Data<\/li>\n<li>WordPress\u2019 Standard Tables<\/li>\n<li>Creating a Custom Table<\/li>\n<li>Updating the Structure of a Custom Table<\/li>\n<li>dbDelta() Tips for Success<\/li>\n<li>Accessing Your Custom Table<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 8: Users<\/h3>\n<h4>Working with Users<\/h4>\n<ul>\n<li>User Functions<\/li>\n<li>Creating, Updating, and Deleting Users<\/li>\n<li>User Data<\/li>\n<li>User Metadata<\/li>\n<\/ul>\n<h4>Roles and Capabilities<\/h4>\n<ul>\n<li>What Are Roles and Capabilities?<\/li>\n<li>Default Roles<\/li>\n<li>Custom Roles<\/li>\n<\/ul>\n<h4>Limiting Access<\/h4>\n<ul>\n<li>Checking User Permissions<\/li>\n<li>Is the User an Admin?<\/li>\n<li>Allowing Custom Permissions<\/li>\n<\/ul>\n<h4>Customizing Roles<\/h4>\n<ul>\n<li>Creating a Role<\/li>\n<li>Deleting a Role<\/li>\n<li>Adding Capabilities to a Role<\/li>\n<li>Removing Capabilities from a Role<\/li>\n<li>A Custom Role and Capability Plugin<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 9: HTTP API<\/h3>\n<h4>HTTP Requests Crash Course<\/h4>\n<ul>\n<li>What Is an HTTP Request?<\/li>\n<li>How to Make HTTP Requests in PHP<\/li>\n<\/ul>\n<h4>WordPress\u2019 HTTP Functions<\/h4>\n<ul>\n<li>The wp_remote_ Functions<\/li>\n<li>Advanced Configuration and Tips<\/li>\n<\/ul>\n<h4>Practice: Reading JSON from a Remote API<\/h4>\n<ul>\n<li>Getting and Reading JSON<\/li>\n<li>Your Functional Plugin<\/li>\n<\/ul>\n<h4>Practice: Sending Data to a Remote API<\/h4>\n<ul>\n<li>Formatting Parameters for POST Requests<\/li>\n<li>Your Functional Plugin<\/li>\n<\/ul>\n<h4>Practice: Reading Arbitrary Content<\/h4>\n<h4>Make Your Own Plugin Repository<\/h4>\n<ul>\n<li>How Plugin Upgrades Work in WordPress<\/li>\n<li>Polling an Alternative API from a Plugin<\/li>\n<li>Building the Alternative API<\/li>\n<li>A Few Words of Caution About Self-Hosted API<\/li>\n<\/ul>\n<h4>Special Case: Fetching Remote Feeds<\/h4>\n<h4>Summary<\/h4>\n<h3>Chapter 10: The Shortcode API<\/h3>\n<h4>Creating Shortcodes<\/h4>\n<ul>\n<li>What Shortcodes Are<\/li>\n<li>Register Custom Shortcodes<\/li>\n<\/ul>\n<h4>Shortcode Tips<\/h4>\n<ul>\n<li>Think Simplicity for the User<\/li>\n<li>Remember the Dynamicity<\/li>\n<li>Look Under the Hoods<\/li>\n<li>A \u201cbb code\u201d for Comments Plugin<\/li>\n<li>Shortcode Nesting Limitations<\/li>\n<\/ul>\n<h4>Integrating Google Maps<\/h4>\n<ul>\n<li>Accessing the Google Geocoding API<\/li>\n<li>Storing API Results<\/li>\n<li>Accessing the Google Maps API<\/li>\n<\/ul>\n<h4>More Shortcode Quick Ideas<\/h4>\n<ul>\n<li>Display Member-Only Content<\/li>\n<li>Display Time-Limited Content<\/li>\n<li>Obfuscate Email Addresses<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 11: Extending Posts: Meta Data, Custom Post Types, and Taxonomies<\/h3>\n<h4>Creating Custom Post Types<\/h4>\n<ul>\n<li>Post Type Possibilities<\/li>\n<li>Registering a Post Type<\/li>\n<li>Setting Post Type Labels<\/li>\n<li>Using Custom Capabilities<\/li>\n<li>Attaching Existing Taxonomies<\/li>\n<\/ul>\n<h4>Using Custom Post Types<\/h4>\n<ul>\n<li>Creating a Custom Post Type Loop<\/li>\n<li>Retrieving Custom Post Type Content<\/li>\n<li>Checking if Post Type Exists<\/li>\n<\/ul>\n<h4>Post Meta Data<\/h4>\n<ul>\n<li>Adding Post Meta Data<\/li>\n<li>Retrieving Post Meta Data<\/li>\n<li>Updating Post Meta Data<\/li>\n<li>Deleting Post Meta Data<\/li>\n<\/ul>\n<h4>Creating Custom Taxonomies<\/h4>\n<ul>\n<li>Understanding Taxonomies<\/li>\n<li>Registering a Custom Taxonomy<\/li>\n<li>Assigning a Taxonomy to a Post Type<\/li>\n<\/ul>\n<h4>Using Custom Taxonomies<\/h4>\n<ul>\n<li>Retrieving a Taxonomy<\/li>\n<li>Using a Taxonomy with Posts<\/li>\n<li>Taxonomy Conditional Tags<\/li>\n<\/ul>\n<h4>A Post Type and Taxonomy Plugin<\/h4>\n<h4>Summary<\/h4>\n<h3>Chapter 12: JavaScript and Ajax in WordPress<\/h3>\n<h4>jQuery\u2013A Brief Introduction<\/h4>\n<ul>\n<li>Benefits of Using jQuery<\/li>\n<li>jQuery Crash Course<\/li>\n<\/ul>\n<h4>Ajax<\/h4>\n<ul>\n<li>What Is Ajax?<\/li>\n<li>Ajax Best Practices<\/li>\n<\/ul>\n<h4>Adding JavaScript in WordPress<\/h4>\n<ul>\n<li>A Proper Way to Include Scripts<\/li>\n<li>Where to Include Scripts<\/li>\n<li>Adding Scripts Only When Needed<\/li>\n<li>Dynamic Scripts in WordPress<\/li>\n<\/ul>\n<h4>Ajax in WordPress<\/h4>\n<ul>\n<li>Ajax in WordPress: Principles<\/li>\n<li>A Complete Example: Instant \u201cRead More\u201d Links<\/li>\n<li>Another Example: Frontend Comment Deletion<\/li>\n<li>Debugging Ajax<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 13: Cron<\/h3>\n<h4>What Is Cron?<\/h4>\n<ul>\n<li>How Is Cron Executed?<\/li>\n<\/ul>\n<h4>Scheduling Cron Events<\/h4>\n<ul>\n<li>Scheduling a Recurring Event<\/li>\n<li>Scheduling a Single Event<\/li>\n<li>Unscheduling an Event<\/li>\n<li>Specifying Your Own Cron Intervals<\/li>\n<li>Viewing Cron Events Scheduled<\/li>\n<\/ul>\n<h4>True Cron<\/h4>\n<h4>Practical Use<\/h4>\n<ul>\n<li>Deleting Post Revisions Weekly<\/li>\n<li>The Blog Pester Plugin<\/li>\n<li>The Delete Comments Plugin<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 14: The Rewrite API<\/h3>\n<h4>Why Rewrite URLs<\/h4>\n<ul>\n<li>Permalinks Principles<\/li>\n<li>Apache\u2019s mod_rewrite<\/li>\n<li>URL Rewriting in WordPress<\/li>\n<\/ul>\n<h4>How WordPress Handles Queries<\/h4>\n<ul>\n<li>Overview of the Query Process<\/li>\n<li>The rewrite Object<\/li>\n<li>The query Object<\/li>\n<li>What Plugins Can Do<\/li>\n<\/ul>\n<h4>Practical Uses<\/h4>\n<ul>\n<li>Rewriting a URL to Create a List of Shops<\/li>\n<li>Creating a New Permalink Structure and Integrating Non-WordPress Pages<\/li>\n<li>Adding an Endpoint and Altering Output Format<\/li>\n<li>Adding a Custom Feed for the Latest Uploaded Images<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 15: Multisite<\/h3>\n<h4>Differences<\/h4>\n<ul>\n<li>WordPress Versus Multisite Network<\/li>\n<li>Understanding Multisite Terminology<\/li>\n<li>Advantages of Multisite<\/li>\n<\/ul>\n<h4>Enabling Multisite in WordPress<\/h4>\n<h4>Multisite Functions<\/h4>\n<ul>\n<li>The Power of Blog ID<\/li>\n<li>Common Functions<\/li>\n<li>Switching and Restoring Sites<\/li>\n<li>Network Content Shortcode Examples<\/li>\n<li>A Network Content Widget Example<\/li>\n<li>Creating a New Site<\/li>\n<li>Multisite Site Options<\/li>\n<li>Users in a Network<\/li>\n<li>Multisite Super Admin<\/li>\n<li>Checking the Site Owner<\/li>\n<li>Network Stats<\/li>\n<\/ul>\n<h4>Multisite Database Schema<\/h4>\n<ul>\n<li>Multisite-Specific Tables<\/li>\n<li>Site-Specific Tables<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 16: Debugging and Optimizing<\/h3>\n<h4>Supporting Old Versions (Not)<\/h4>\n<ul>\n<li>Keeping Current with WordPress Development<\/li>\n<li>Deprecated Functions<\/li>\n<li>Dealing with Obsolete Client Installs<\/li>\n<\/ul>\n<h4>Debugging<\/h4>\n<ul>\n<li>Enabling Debugging<\/li>\n<li>Displaying Debug Messages<\/li>\n<li>Correcting Debug Messages<\/li>\n<\/ul>\n<h4>Error Logging<\/h4>\n<ul>\n<li>Enabling Logging<\/li>\n<li>Setting Log File Location<\/li>\n<li>Understanding the Log File<\/li>\n<\/ul>\n<h4>Caching<\/h4>\n<ul>\n<li>Saving, Loading, and Deleting Cached Data<\/li>\n<li>Caching Data Within a Plugin<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 17: Marketing Your Plugin<\/h3>\n<h4>Choosing a License for Your Plugin<\/h4>\n<ul>\n<li>Different Options<\/li>\n<li>Why It Matters<\/li>\n<li>Making Money While Using the GPL<\/li>\n<\/ul>\n<h4>Submitting to WordPress.org<\/h4>\n<ul>\n<li>Creating an Account<\/li>\n<li>Submitting a Plugin<\/li>\n<li>Setting Up SVN<\/li>\n<li>Creating a readme.txt File<\/li>\n<\/ul>\n<h4>Getting Your Plugin Renowned<\/h4>\n<ul>\n<li>Naming Your Plugin<\/li>\n<li>Building a Web Site<\/li>\n<li>Creating a Page for Your Plugin<\/li>\n<li>Announcing Your Plugin<\/li>\n<li>Supporting Your Plugins<\/li>\n<li>Getting Feedback<\/li>\n<li>Getting Out of the Basement<\/li>\n<li>Other Promotion Methods<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n<h3>Chapter 18: The Developer Toolbox<\/h3>\n<h4>Core as Reference<\/h4>\n<ul>\n<li>Inline Documentation<\/li>\n<li>Finding Functions<\/li>\n<li>Common Core Files<\/li>\n<\/ul>\n<h4>Codex<\/h4>\n<ul>\n<li>Searching the Codex<\/li>\n<li>Function Reference<\/li>\n<\/ul>\n<h4>Tool Web Sites<\/h4>\n<ul>\n<li>PHPXref<\/li>\n<li>Hooks Database<\/li>\n<\/ul>\n<h4>Community Resources<\/h4>\n<ul>\n<li>Support Forums<\/li>\n<li>Mailing Lists<\/li>\n<li>WordPress Chat<\/li>\n<li>WordPress Development Updates<\/li>\n<li>WordPress Ideas<\/li>\n<li>Community News Sites<\/li>\n<li>Local Events<\/li>\n<\/ul>\n<h4>Tools<\/h4>\n<ul>\n<li>Browser<\/li>\n<li>Editor<\/li>\n<li>Deploying Files with FTP, SFTP, and SSH<\/li>\n<li>phpMyAdmin<\/li>\n<\/ul>\n<h4>Summary<\/h4>\n","protected":false},"excerpt":{"rendered":"<p>I wrote a book about WordPress Plugin Development, along with WordPress rockstars Brad Williams and Justin Tadlock. The book is available as paperback, DRM-free ebook and Kindle. This page describes the book, its intended audience and its content, in the following short pages: intro, here, duh Overview of the book. Skip if you know what [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1646,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1649","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/pages\/1649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/comments?post=1649"}],"version-history":[{"count":0,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/pages\/1649\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/pages\/1646"}],"wp:attachment":[{"href":"https:\/\/planetozh.com\/blog\/wp-json\/wp\/v2\/media?parent=1649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}