{"product_id":"professional-wordpress-plugin-development-paperback-softback-9781119666943","title":"Professional WordPress Plugin Development (Paperback \/ softback) 9781119666943","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eProfessional WordPress Plugin Development\u003c\/font\u003e\u003cbr\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003c\/p\u003e\n\u003cp\u003e\u003cfont size=\"4\"\u003eBrad Williams (Author), Justin Tadlock (Author), John James Jacoby (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9781119666943, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003ePaperback \/ softback, published 14 June 2020\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e480 pages\u003cbr\u003e23.4 x 18.5 x 2.5 cm, 0.794 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cp\u003e\u003cb\u003eExtend WordPress with plugins using this advanced WordPress development book, updated for the current version\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThis significantly updated edition of \u003ci\u003eProfessional WordPress Plugin Development\u003c\/i\u003e addresses modern plugin development for WordPress, the highly popular content management system (CMS). If you’re using WordPress to create and manage websites, WordPress plugins are the software that can extend or enhance CMS functionality. This book offers guidance on writing plugins for WordPress sites to share or sell to other users.\u003c\/p\u003e \u003cp\u003eThe second edition of \u003ci\u003eProfessional WordPress Plugin Development\u003c\/i\u003e covers the building of advanced plugin development scenarios. It discusses the plugin framework and coding standards as well as dashboards, settings, menus, and related application programming interfaces (APIs). Additional topics include security, performance, data validation, and SQL statements.\u003c\/p\u003e \u003cp\u003e•    Learn about the power of hooks in WordPress\u003c\/p\u003e \u003cp\u003e•    Discover how JavaScript and Ajax will work in your site\u003c\/p\u003e \u003cp\u003e•    Understand key technologies: Block Editor\/Gutenberg, JS\/React, PHP, and the REST API\u003c\/p\u003e \u003cp\u003e•    Create and use custom post types and taxonomies.\u003c\/p\u003e \u003cp\u003e•    Creating custom dashboard menus and plugin settings\u003c\/p\u003e \u003cp\u003e•    Work with users and user data\u003c\/p\u003e \u003cp\u003e•    Schedule tasks and utilizing Cron\u003c\/p\u003e \u003cp\u003e•    Performance and security considerations\u003c\/p\u003e \u003cp\u003eWritten by experienced plugin developers, \u003ci\u003eProfessional WordPress Plugin Development\u003c\/i\u003e also helps you internationalize and localize your WordPress website. Find out about debugging systems and optimizing your site for speed. As WordPress use continues to increase, you can elevate your professional knowledge of how to extend WordPress through plugins.\u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eIntroduction xxxi\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1: An Introduction to Plugins 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is a Plugin? 1\u003c\/p\u003e \u003cp\u003eHow Plugins Interact with WordPress 2\u003c\/p\u003e \u003cp\u003eWhen are Plugins Loaded? 3\u003c\/p\u003e \u003cp\u003eAvailable Plugins 4\u003c\/p\u003e \u003cp\u003eOfficial Plugin Directory 4\u003c\/p\u003e \u003cp\u003ePopular Plugin Examples 4\u003c\/p\u003e \u003cp\u003ePopular Plugin Tags 5\u003c\/p\u003e \u003cp\u003eAdvantages of Plugins 5\u003c\/p\u003e \u003cp\u003eNot Modifying Core 5\u003c\/p\u003e \u003cp\u003eWhy Reinvent the Wheel? 5\u003c\/p\u003e \u003cp\u003eSeparating Plugins and Themes 6\u003c\/p\u003e \u003cp\u003eEasy Updates 7\u003c\/p\u003e \u003cp\u003eEasier to Share and Reuse 7\u003c\/p\u003e \u003cp\u003ePlugin Sandbox 7\u003c\/p\u003e \u003cp\u003ePlugin Community 7\u003c\/p\u003e \u003cp\u003eInstalling and Managing Plugins 8\u003c\/p\u003e \u003cp\u003eInstalling a Plugin 8\u003c\/p\u003e \u003cp\u003eManaging Plugins 9\u003c\/p\u003e \u003cp\u003eEditing Plugins 9\u003c\/p\u003e \u003cp\u003ePlugin Directories 9\u003c\/p\u003e \u003cp\u003eTypes of Plugins 10\u003c\/p\u003e \u003cp\u003eSummary 11\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2: Plugin Framework 13\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eRequirements for Plugins 13\u003c\/p\u003e \u003cp\u003eNaming Your Plugin 14\u003c\/p\u003e \u003cp\u003eUsing a Folder 14\u003c\/p\u003e \u003cp\u003eBest Practices 14\u003c\/p\u003e \u003cp\u003eNamespace Everything 14\u003c\/p\u003e \u003cp\u003eFile Organization 15\u003c\/p\u003e \u003cp\u003eFolder Structure 16\u003c\/p\u003e \u003cp\u003ePlugin Header 17\u003c\/p\u003e \u003cp\u003eCreating the Header 17\u003c\/p\u003e \u003cp\u003ePlugin License 18\u003c\/p\u003e \u003cp\u003eDetermining Paths 19\u003c\/p\u003e \u003cp\u003ePlugin Paths 19\u003c\/p\u003e \u003cp\u003eLocal Paths 19\u003c\/p\u003e \u003cp\u003eURL Paths 20\u003c\/p\u003e \u003cp\u003eActivate\/Deactivate Functions 22\u003c\/p\u003e \u003cp\u003ePlugin Activation Function 22\u003c\/p\u003e \u003cp\u003ePlugin Deactivation Function 23\u003c\/p\u003e \u003cp\u003eDeactivate is Not Uninstall 23\u003c\/p\u003e \u003cp\u003eUninstall Methods 24\u003c\/p\u003e \u003cp\u003eWhy Uninstall is Necessary 24\u003c\/p\u003e \u003cp\u003eUninstall.php 24\u003c\/p\u003e \u003cp\u003eUninstall Hook 25\u003c\/p\u003e \u003cp\u003eCoding Standards 25\u003c\/p\u003e \u003cp\u003eDocument Your Code 26\u003c\/p\u003e \u003cp\u003eNaming Variables and Functions 27\u003c\/p\u003e \u003cp\u003eNaming Classes and Methods 27\u003c\/p\u003e \u003cp\u003eNaming Files 28\u003c\/p\u003e \u003cp\u003eSingle and Double Quotes 28\u003c\/p\u003e \u003cp\u003eIndentation 28\u003c\/p\u003e \u003cp\u003eBrace Style 29\u003c\/p\u003e \u003cp\u003eSpace Usage 29\u003c\/p\u003e \u003cp\u003eShorthand PHP 30\u003c\/p\u003e \u003cp\u003eSQL Statements 30\u003c\/p\u003e \u003cp\u003eSummary 30\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3: Dashboard And Settings 31\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAdding Menus and Submenus 31\u003c\/p\u003e \u003cp\u003eCreating a Top-Level Menu 32\u003c\/p\u003e \u003cp\u003eAdding a Submenu 33\u003c\/p\u003e \u003cp\u003eAdding a Menu Item to an Existing Menu 34\u003c\/p\u003e \u003cp\u003ePlugin Settings 36\u003c\/p\u003e \u003cp\u003eThe Options API 36\u003c\/p\u003e \u003cp\u003eSaving Options 36\u003c\/p\u003e \u003cp\u003eSaving an Array of Options 37\u003c\/p\u003e \u003cp\u003eUpdating Options 37\u003c\/p\u003e \u003cp\u003eRetrieving Options 38\u003c\/p\u003e \u003cp\u003eLoading an Array of Options 39\u003c\/p\u003e \u003cp\u003eDeleting Options 40\u003c\/p\u003e \u003cp\u003eThe Autoload Parameter 40\u003c\/p\u003e \u003cp\u003eSegregating Plugin Options 41\u003c\/p\u003e \u003cp\u003eToggling the Autoload Parameter 42\u003c\/p\u003e \u003cp\u003eThe Settings API 42\u003c\/p\u003e \u003cp\u003eBenefits of the Settings API 42\u003c\/p\u003e \u003cp\u003eSettings API Functions 43\u003c\/p\u003e \u003cp\u003eCreating the Plugin Administration Page 43\u003c\/p\u003e \u003cp\u003eRegistering New Settings 44\u003c\/p\u003e \u003cp\u003eDefining Sections and Settings 44\u003c\/p\u003e \u003cp\u003eValidating User Input 46\u003c\/p\u003e \u003cp\u003eRendering the Form 47\u003c\/p\u003e \u003cp\u003eAll Done! 48\u003c\/p\u003e \u003cp\u003eWrapping It Up: A Complete Plugin Management Page 48\u003c\/p\u003e \u003cp\u003eImproving Feedback on Validation Errors 51\u003c\/p\u003e \u003cp\u003eExpanding with Additional Field Types 52\u003c\/p\u003e \u003cp\u003eAdding Fields to an Existing Page 59\u003c\/p\u003e \u003cp\u003eHow It Works 59\u003c\/p\u003e \u003cp\u003eAdding a Section to an Existing Page 59\u003c\/p\u003e \u003cp\u003eAdding Only Fields 60\u003c\/p\u003e \u003cp\u003eWordPress’ Sections and Setting Fields 61\u003c\/p\u003e \u003cp\u003eUser Interface Concerns 62\u003c\/p\u003e \u003cp\u003eRemoving Settings 62\u003c\/p\u003e \u003cp\u003eKeeping It Consistent 63\u003c\/p\u003e \u003cp\u003eUsing the WordPress UI 64\u003c\/p\u003e \u003cp\u003eHeadings 64\u003c\/p\u003e \u003cp\u003eDashicons 64\u003c\/p\u003e \u003cp\u003eMessages 65\u003c\/p\u003e \u003cp\u003eButtons 66\u003c\/p\u003e \u003cp\u003eForm Fields 67\u003c\/p\u003e \u003cp\u003eTables 68\u003c\/p\u003e \u003cp\u003ePagination 69\u003c\/p\u003e \u003cp\u003eSummary 70\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4: Security And Performance 71\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eSecurity Overview 72\u003c\/p\u003e \u003cp\u003eWhat Securing Your Plugin is 72\u003c\/p\u003e \u003cp\u003eWhat Securing Your Plugin is Not 72\u003c\/p\u003e \u003cp\u003eUser Permissions 72\u003c\/p\u003e \u003cp\u003eHow to Check current_user_can() 73\u003c\/p\u003e \u003cp\u003eDo Not Check Too Early 73\u003c\/p\u003e \u003cp\u003eNonces 74\u003c\/p\u003e \u003cp\u003eAuthority vs. Intention 74\u003c\/p\u003e \u003cp\u003eWhat is a Nonce? 75\u003c\/p\u003e \u003cp\u003eHow to Create and Verify Nonces 75\u003c\/p\u003e \u003cp\u003eCreating a Nonce URL 76\u003c\/p\u003e \u003cp\u003eCreating a Nonce Field 76\u003c\/p\u003e \u003cp\u003eCreating and Verifying a Nonce in a Plugin 77\u003c\/p\u003e \u003cp\u003eData Validation and Sanitization 78\u003c\/p\u003e \u003cp\u003eThe Need for Data Validation and Sanitization 78\u003c\/p\u003e \u003cp\u003eGood Practice: Identifying Potentially Tainted Data 80\u003c\/p\u003e \u003cp\u003eValidating or Sanitizing Input? 81\u003c\/p\u003e \u003cp\u003eValidating and Sanitizing Cookbook 81\u003c\/p\u003e \u003cp\u003eIntegers 81\u003c\/p\u003e \u003cp\u003eArbitrary Text Strings 82\u003c\/p\u003e \u003cp\u003eKey and Identifier Strings 83\u003c\/p\u003e \u003cp\u003eEmail Strings 84\u003c\/p\u003e \u003cp\u003eURLs 84\u003c\/p\u003e \u003cp\u003eHTML 86\u003c\/p\u003e \u003cp\u003eJavaScript 88\u003c\/p\u003e \u003cp\u003eEnvironment and Server Variables 88\u003c\/p\u003e \u003cp\u003eArrays of Data 89\u003c\/p\u003e \u003cp\u003eDatabase Queries 89\u003c\/p\u003e \u003cp\u003eFormatting SQL Statements 90\u003c\/p\u003e \u003cp\u003eThe $wpdb Object 90\u003c\/p\u003e \u003cp\u003eWhy wpdb Methods are Superior 91\u003c\/p\u003e \u003cp\u003eAll-in-One Methods 91\u003c\/p\u003e \u003cp\u003e$wpdb-\u0026gt;update() 92\u003c\/p\u003e \u003cp\u003e$wpdb-\u0026gt;insert() 92\u003c\/p\u003e \u003cp\u003eCommon Methods 93\u003c\/p\u003e \u003cp\u003eSelect a Variable 93\u003c\/p\u003e \u003cp\u003eSelect a Row 94\u003c\/p\u003e \u003cp\u003eSelect a Column 94\u003c\/p\u003e \u003cp\u003eSelect Generic Results 95\u003c\/p\u003e \u003cp\u003eGeneric Queries 96\u003c\/p\u003e \u003cp\u003eProtecting Queries against SQL Injections 96\u003c\/p\u003e \u003cp\u003eSecurity Good Habits 97\u003c\/p\u003e \u003cp\u003ePerformance Overview 97\u003c\/p\u003e \u003cp\u003eCaching 98\u003c\/p\u003e \u003cp\u003eSaving Cached Data 98\u003c\/p\u003e \u003cp\u003eLoading and Using Cached Data 99\u003c\/p\u003e \u003cp\u003eDeleting Cached Data 99\u003c\/p\u003e \u003cp\u003eCaching Data within a Plugin 100\u003c\/p\u003e \u003cp\u003eTransients 101\u003c\/p\u003e \u003cp\u003eSaving an Expiring Option 102\u003c\/p\u003e \u003cp\u003eRetrieving an Expiring Option 102\u003c\/p\u003e \u003cp\u003eDeleting an Expiring Option 102\u003c\/p\u003e \u003cp\u003eA Practical Example Using Transients 102\u003c\/p\u003e \u003cp\u003eTechnical Details 103\u003c\/p\u003e \u003cp\u003eTransient Ideas 103\u003c\/p\u003e \u003cp\u003eSummary 104\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5: Hooks 105\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eUnderstanding Hooks 105\u003c\/p\u003e \u003cp\u003eActions 106\u003c\/p\u003e \u003cp\u003eWhat is an Action? 107\u003c\/p\u003e \u003cp\u003eAction Hook Functions 108\u003c\/p\u003e \u003cp\u003eremove_action() 108\u003c\/p\u003e \u003cp\u003eremove_all_actions() 109\u003c\/p\u003e \u003cp\u003edo_action_ref_array 110\u003c\/p\u003e \u003cp\u003ehas_action 111\u003c\/p\u003e \u003cp\u003edid_action() 112\u003c\/p\u003e \u003cp\u003ecurrent_action 112\u003c\/p\u003e \u003cp\u003eregister_activation_hook and register_deactivation_hook 113\u003c\/p\u003e \u003cp\u003eCommonly Used Action Hooks 113\u003c\/p\u003e \u003cp\u003eplugins_loaded 113\u003c\/p\u003e \u003cp\u003einit 114\u003c\/p\u003e \u003cp\u003eadmin_menu 115\u003c\/p\u003e \u003cp\u003esave_post 116\u003c\/p\u003e \u003cp\u003ewp_head 116\u003c\/p\u003e \u003cp\u003eFilters 117\u003c\/p\u003e \u003cp\u003eWhat is a Filter? 118\u003c\/p\u003e \u003cp\u003eFilter Hook Functions 119\u003c\/p\u003e \u003cp\u003eremove_filter 119\u003c\/p\u003e \u003cp\u003eremove_all_filters 120\u003c\/p\u003e \u003cp\u003eapply_filters_ref_array 121\u003c\/p\u003e \u003cp\u003ehas_filter 122\u003c\/p\u003e \u003cp\u003ecurrent_filter 122\u003c\/p\u003e \u003cp\u003eQuick Return Functions 123\u003c\/p\u003e \u003cp\u003eCommonly Used Filter Hooks 124\u003c\/p\u003e \u003cp\u003ethe_content 124\u003c\/p\u003e \u003cp\u003etemplate_include 125\u003c\/p\u003e \u003cp\u003eUsing Hooks from within a Class 126\u003c\/p\u003e \u003cp\u003eUsing Hooks with Anonymous Functions 127\u003c\/p\u003e \u003cp\u003eCreating Custom Hooks 128\u003c\/p\u003e \u003cp\u003eBenefits of Creating Custom Hooks 128\u003c\/p\u003e \u003cp\u003eCustom Action Hook Example 128\u003c\/p\u003e \u003cp\u003eCustom Filter Hook Example 129\u003c\/p\u003e \u003cp\u003eFinding Hooks 129\u003c\/p\u003e \u003cp\u003eSearching for Hooks in the Core Code 130\u003c\/p\u003e \u003cp\u003eVariable Hooks 130\u003c\/p\u003e \u003cp\u003eHook Reference Lists 130\u003c\/p\u003e \u003cp\u003eSummary 131\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6: Javascript 133\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eRegistering Scripts 134\u003c\/p\u003e \u003cp\u003eEnqueueing Scripts 135\u003c\/p\u003e \u003cp\u003eLimiting Scope 136\u003c\/p\u003e \u003cp\u003eLocalizing Scripts 136\u003c\/p\u003e \u003cp\u003eInline Scripts 137\u003c\/p\u003e \u003cp\u003eOverview of Bundled Scripts 139\u003c\/p\u003e \u003cp\u003ejQuery UI and Other Scripts 139\u003c\/p\u003e \u003cp\u003eThe WP Global 140\u003c\/p\u003e \u003cp\u003ea11y Speak 140\u003c\/p\u003e \u003cp\u003eEscaping 140\u003c\/p\u003e \u003cp\u003ei18n 140\u003c\/p\u003e \u003cp\u003eHeartbeat 141\u003c\/p\u003e \u003cp\u003ePolyfills 141\u003c\/p\u003e \u003cp\u003eYour Custom Scripts 141\u003c\/p\u003e \u003cp\u003ejQuery 142\u003c\/p\u003e \u003cp\u003eBenefits of Using jQuery 142\u003c\/p\u003e \u003cp\u003ejQuery Crash Course 142\u003c\/p\u003e \u003cp\u003eThe jQuery Object 143\u003c\/p\u003e \u003cp\u003eSyntax and Chaining 143\u003c\/p\u003e \u003cp\u003eNo-Conflict Mode in WordPress 144\u003c\/p\u003e \u003cp\u003eLaunching Code on Document Ready 144\u003c\/p\u003e \u003cp\u003eAjax 145\u003c\/p\u003e \u003cp\u003eBackbone\/Underscore 146\u003c\/p\u003e \u003cp\u003eReact 146\u003c\/p\u003e \u003cp\u003eSummary 147\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7: Blocks And Gutenberg 149\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is Gutenberg? 149\u003c\/p\u003e \u003cp\u003eTouring Gutenberg 151\u003c\/p\u003e \u003cp\u003ePractical Examples 155\u003c\/p\u003e \u003cp\u003eWooCommerce 156\u003c\/p\u003e \u003cp\u003eThe Events Calendar 157\u003c\/p\u003e \u003cp\u003ePost Type Switcher 158\u003c\/p\u003e \u003cp\u003eTechnology Stack of Gutenberg 159\u003c\/p\u003e \u003cp\u003eJavaScript 160\u003c\/p\u003e \u003cp\u003ePHP 161\u003c\/p\u003e \u003cp\u003eNode.js 162\u003c\/p\u003e \u003cp\u003ewebpack 163\u003c\/p\u003e \u003cp\u003eBabel 163\u003c\/p\u003e \u003cp\u003eReact 163\u003c\/p\u003e \u003cp\u003eJSX 163\u003c\/p\u003e \u003cp\u003eES6 163\u003c\/p\u003e \u003cp\u003e“Hello World!” Block 164\u003c\/p\u003e \u003cp\u003ePHP 164\u003c\/p\u003e \u003cp\u003eJavaScript 164\u003c\/p\u003e \u003cp\u003ewebpack 165\u003c\/p\u003e \u003cp\u003eCommand Line 166\u003c\/p\u003e \u003cp\u003eActivation 167\u003c\/p\u003e \u003cp\u003eWrap-Up 167\u003c\/p\u003e \u003cp\u003eWP-CLI Scaffolding 168\u003c\/p\u003e \u003cp\u003ePlugin 168\u003c\/p\u003e \u003cp\u003eBlocks 169\u003c\/p\u003e \u003cp\u003eIncludes 169\u003c\/p\u003e \u003cp\u003eActivation 169\u003c\/p\u003e \u003cp\u003eWrap-Up 169\u003c\/p\u003e \u003cp\u003ecreate-guten-block Toolkit 170\u003c\/p\u003e \u003cp\u003eInstallation 171\u003c\/p\u003e \u003cp\u003eActivation 171\u003c\/p\u003e \u003cp\u003eWrap-Up 173\u003c\/p\u003e \u003cp\u003eBlock Directory 173\u003c\/p\u003e \u003cp\u003eSummary 174\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8: Content 175\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCreating Custom Post Types 176\u003c\/p\u003e \u003cp\u003ePost Type Possibilities 176\u003c\/p\u003e \u003cp\u003eRegistering a Post Type 177\u003c\/p\u003e \u003cp\u003eregister_post_type 177\u003c\/p\u003e \u003cp\u003eRegistering the Book Collection Post Type 177\u003c\/p\u003e \u003cp\u003eSetting Post Type Labels 179\u003c\/p\u003e \u003cp\u003eUsing Custom Capabilities 180\u003c\/p\u003e \u003cp\u003eAttaching Existing Taxonomies 182\u003c\/p\u003e \u003cp\u003ePost Metadata 183\u003c\/p\u003e \u003cp\u003eRegistering Post Metadata 183\u003c\/p\u003e \u003cp\u003eAdding Post Metadata 184\u003c\/p\u003e \u003cp\u003eRetrieving Post Metadata 185\u003c\/p\u003e \u003cp\u003eUpdating Post Metadata 186\u003c\/p\u003e \u003cp\u003eDeleting Post Metadata 186\u003c\/p\u003e \u003cp\u003eMeta Boxes 187\u003c\/p\u003e \u003cp\u003eWhat is a Meta Box? 187\u003c\/p\u003e \u003cp\u003eAdding a Custom Meta Box 188\u003c\/p\u003e \u003cp\u003eSaving Meta Box Data 190\u003c\/p\u003e \u003cp\u003eCreating Custom Taxonomies 191\u003c\/p\u003e \u003cp\u003eUnderstanding Taxonomies 192\u003c\/p\u003e \u003cp\u003eRegistering a Custom Taxonomy 192\u003c\/p\u003e \u003cp\u003eregister_taxonomy 193\u003c\/p\u003e \u003cp\u003eRegistering the Genre Taxonomy 193\u003c\/p\u003e \u003cp\u003eAssigning a Taxonomy to a Post Type 194\u003c\/p\u003e \u003cp\u003eUsing Custom Taxonomies 195\u003c\/p\u003e \u003cp\u003eRetrieving a Taxonomy 196\u003c\/p\u003e \u003cp\u003eUsing a Taxonomy with Posts 196\u003c\/p\u003e \u003cp\u003eTaxonomy Conditional Tags 197\u003c\/p\u003e \u003cp\u003etaxonomy_exists 197\u003c\/p\u003e \u003cp\u003eis_taxonomy_hierarchical 198\u003c\/p\u003e \u003cp\u003eis_tax 198\u003c\/p\u003e \u003cp\u003eA Post Type, Post Metadata, and Taxonomy Plugin 199\u003c\/p\u003e \u003cp\u003eSummary 204\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9: Users And User Data 205\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWorking with Users 206\u003c\/p\u003e \u003cp\u003eUser Functions 206\u003c\/p\u003e \u003cp\u003eis_user_logged_in() 206\u003c\/p\u003e \u003cp\u003eget_users() 207\u003c\/p\u003e \u003cp\u003ecount_users 207\u003c\/p\u003e \u003cp\u003eCreating, Updating, and Deleting Users 208\u003c\/p\u003e \u003cp\u003eCreating a New User 209\u003c\/p\u003e \u003cp\u003eUpdating an Existing User 211\u003c\/p\u003e \u003cp\u003eDeleting an Existing User 212\u003c\/p\u003e \u003cp\u003eUser Data 213\u003c\/p\u003e \u003cp\u003eGetting a User Object and Data 213\u003c\/p\u003e \u003cp\u003eGetting the Current User Object 215\u003c\/p\u003e \u003cp\u003eGetting User Post Counts 215\u003c\/p\u003e \u003cp\u003eUser Metadata 217\u003c\/p\u003e \u003cp\u003eAdding User Metadata 218\u003c\/p\u003e \u003cp\u003eRetrieving User Metadata 218\u003c\/p\u003e \u003cp\u003eUpdating User Metadata 219\u003c\/p\u003e \u003cp\u003eDeleting User Metadata 220\u003c\/p\u003e \u003cp\u003eCreating a Plugin with User Metadata 220\u003c\/p\u003e \u003cp\u003eRoles and Capabilities 223\u003c\/p\u003e \u003cp\u003eWhat are Roles and Capabilities? 223\u003c\/p\u003e \u003cp\u003eDefault Roles 224\u003c\/p\u003e \u003cp\u003eCustom Roles 224\u003c\/p\u003e \u003cp\u003eLimiting Access 225\u003c\/p\u003e \u003cp\u003eChecking User Permissions 225\u003c\/p\u003e \u003cp\u003eIs the User an Admin? 227\u003c\/p\u003e \u003cp\u003eCustomizing Roles 228\u003c\/p\u003e \u003cp\u003eCreating a Role 228\u003c\/p\u003e \u003cp\u003eDeleting a Role 230\u003c\/p\u003e \u003cp\u003eAdding Capabilities to a Role 230\u003c\/p\u003e \u003cp\u003eRemoving Capabilities from a Role 231\u003c\/p\u003e \u003cp\u003eA Custom Role and Capability Plugin 231\u003c\/p\u003e \u003cp\u003eSummary 233\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10: Scheduled Tasks 235\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is Cron? 235\u003c\/p\u003e \u003cp\u003eHow is Cron Executed? 236\u003c\/p\u003e \u003cp\u003eScheduling Cron Events 236\u003c\/p\u003e \u003cp\u003eScheduling a Recurring Event 236\u003c\/p\u003e \u003cp\u003eScheduling a Single Event 238\u003c\/p\u003e \u003cp\u003eUnscheduling an Event 240\u003c\/p\u003e \u003cp\u003eSpecifying Your Own Cron Intervals 241\u003c\/p\u003e \u003cp\u003eViewing Scheduled Cron Events 242\u003c\/p\u003e \u003cp\u003eTrue Cron 247\u003c\/p\u003e \u003cp\u003ePractical Use 247\u003c\/p\u003e \u003cp\u003eThe Blog Pester Plugin 247\u003c\/p\u003e \u003cp\u003eDeleting Post Revisions Weekly 250\u003c\/p\u003e \u003cp\u003eThe Delete Comments Plugin 253\u003c\/p\u003e \u003cp\u003eSummary 258\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11: Internationalization 259\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInternationalization and Localization 260\u003c\/p\u003e \u003cp\u003eWhy Internationalize? 260\u003c\/p\u003e \u003cp\u003eUnderstanding Internationalization in Professional Work 261\u003c\/p\u003e \u003cp\u003eGetting Your Plugin Ready for Translation 261\u003c\/p\u003e \u003cp\u003eEchoing and Returning Strings 262\u003c\/p\u003e \u003cp\u003eThe __() Function 262\u003c\/p\u003e \u003cp\u003eThe _e() Function 263\u003c\/p\u003e \u003cp\u003eThe esc_attr__() Function 263\u003c\/p\u003e \u003cp\u003eThe esc_attr_e() Function 264\u003c\/p\u003e \u003cp\u003eThe esc_html__() Function 264\u003c\/p\u003e \u003cp\u003eThe esc_html_e() Function 264\u003c\/p\u003e \u003cp\u003eThe _x() Function 264\u003c\/p\u003e \u003cp\u003eThe _ex() Function 265\u003c\/p\u003e \u003cp\u003eThe esc_attr_x() Function 266\u003c\/p\u003e \u003cp\u003eThe esc_html_x() Function 266\u003c\/p\u003e \u003cp\u003eThe _n() Function 267\u003c\/p\u003e \u003cp\u003eThe _nx() Function 268\u003c\/p\u003e \u003cp\u003eThe _n_noop() Function 269\u003c\/p\u003e \u003cp\u003eThe _nx_noop() Function 270\u003c\/p\u003e \u003cp\u003eUsing Placeholders 271\u003c\/p\u003e \u003cp\u003eInternationalizing JavaScript 273\u003c\/p\u003e \u003cp\u003eDeveloper Handbook Resource 275\u003c\/p\u003e \u003cp\u003eCreating Translation Files 275\u003c\/p\u003e \u003cp\u003eThe MO and PO Files 276\u003c\/p\u003e \u003cp\u003eTranslation Tools 276\u003c\/p\u003e \u003cp\u003eHow to Create a POT File 277\u003c\/p\u003e \u003cp\u003eCommand Line 278\u003c\/p\u003e \u003cp\u003eWhere to Store Translation Files 278\u003c\/p\u003e \u003cp\u003eSummary 278\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12: Rest Api 279\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat the REST API is 279\u003c\/p\u003e \u003cp\u003eWhat You Can Do with the REST API 280\u003c\/p\u003e \u003cp\u003eAccessing the WordPress REST API 281\u003c\/p\u003e \u003cp\u003eDefault Endpoints 282\u003c\/p\u003e \u003cp\u003eREST API Clients 283\u003c\/p\u003e \u003cp\u003eInsomnia 283\u003c\/p\u003e \u003cp\u003ePostman 283\u003c\/p\u003e \u003cp\u003eAuthentication 284\u003c\/p\u003e \u003cp\u003eEnhanced Authentication 285\u003c\/p\u003e \u003cp\u003eCustom Endpoints 286\u003c\/p\u003e \u003cp\u003eThe HTTP API 289\u003c\/p\u003e \u003cp\u003eWhat is an HTTP Request? 289\u003c\/p\u003e \u003cp\u003eHTTP Request Concepts 289\u003c\/p\u003e \u003cp\u003eDissecting an HTTP Transaction 289\u003c\/p\u003e \u003cp\u003eSome Caveats on Checking HTTP Responses 291\u003c\/p\u003e \u003cp\u003ePossibilities for Crafting HTTP Requests 292\u003c\/p\u003e \u003cp\u003eHow to Make HTTP Requests in PHP 292\u003c\/p\u003e \u003cp\u003eUsing the HTTP Extension 292\u003c\/p\u003e \u003cp\u003eUsing fopen() Streams 293\u003c\/p\u003e \u003cp\u003eUsing a Standard fopen() 293\u003c\/p\u003e \u003cp\u003eUsing fsockopen() 293\u003c\/p\u003e \u003cp\u003eUsing the CURL Extension 294\u003c\/p\u003e \u003cp\u003eToo Many Ways? 294\u003c\/p\u003e \u003cp\u003eWordPress’ HTTP Functions 294\u003c\/p\u003e \u003cp\u003eThe wp_remote_ Functions 294\u003c\/p\u003e \u003cp\u003ewp_remote_* Input Parameters 295\u003c\/p\u003e \u003cp\u003ewp_remote_* Return Values 297\u003c\/p\u003e \u003cp\u003ewp_remote_ Companion Functions 302\u003c\/p\u003e \u003cp\u003eAdvanced Configuration and Tips 303\u003c\/p\u003e \u003cp\u003eProxy Support 303\u003c\/p\u003e \u003cp\u003eFiltering Requests and Responses 304\u003c\/p\u003e \u003cp\u003eBringing It All Together 307\u003c\/p\u003e \u003cp\u003eCreate 307\u003c\/p\u003e \u003cp\u003eUpdate 309\u003c\/p\u003e \u003cp\u003eDelete 309\u003c\/p\u003e \u003cp\u003eResources 313\u003c\/p\u003e \u003cp\u003eSummary 313\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 13: Multisite 315\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eTerminology 316\u003c\/p\u003e \u003cp\u003eAdvantages of Multisite 317\u003c\/p\u003e \u003cp\u003eEnabling Multisite in WordPress 317\u003c\/p\u003e \u003cp\u003eMultisite Functions 319\u003c\/p\u003e \u003cp\u003eThe Site ID 319\u003c\/p\u003e \u003cp\u003eCommon Functions 319\u003c\/p\u003e \u003cp\u003eSwitching and Restoring Sites 321\u003c\/p\u003e \u003cp\u003eNetwork Content Shortcode Examples 325\u003c\/p\u003e \u003cp\u003eA Network Content Widget Example 330\u003c\/p\u003e \u003cp\u003eCreating a New Site 336\u003c\/p\u003e \u003cp\u003eSite Options 342\u003c\/p\u003e \u003cp\u003eNetwork Options 342\u003c\/p\u003e \u003cp\u003eSite Meta 343\u003c\/p\u003e \u003cp\u003eUsers and Roles 343\u003c\/p\u003e \u003cp\u003eSuper Admin 348\u003c\/p\u003e \u003cp\u003eChecking the Site Owner 349\u003c\/p\u003e \u003cp\u003eNetwork Stats 350\u003c\/p\u003e \u003cp\u003eDatabase Schema 350\u003c\/p\u003e \u003cp\u003eMultisite-Specific Tables 350\u003c\/p\u003e \u003cp\u003eSite-Specific Tables 351\u003c\/p\u003e \u003cp\u003eQuery Classes 351\u003c\/p\u003e \u003cp\u003eWP_Site_Query 351\u003c\/p\u003e \u003cp\u003eWP_Network_Query 352\u003c\/p\u003e \u003cp\u003eObject Classes 352\u003c\/p\u003e \u003cp\u003eWP_Site 352\u003c\/p\u003e \u003cp\u003eWP_Network 352\u003c\/p\u003e \u003cp\u003eSummary 352\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 14: The Kitchen Sink 353\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eQuerying and Displaying Posts 353\u003c\/p\u003e \u003cp\u003eUse Case for Displaying Posts 354\u003c\/p\u003e \u003cp\u003eWP_Query Overview 354\u003c\/p\u003e \u003cp\u003eThe Loop 355\u003c\/p\u003e \u003cp\u003eShortcodes 358\u003c\/p\u003e \u003cp\u003eWhat Shortcodes are 358\u003c\/p\u003e \u003cp\u003eRegister Custom Shortcodes 359\u003c\/p\u003e \u003cp\u003eBuilding a Simple Shortcode 360\u003c\/p\u003e \u003cp\u003eBuilding a Shortcode with Parameters 362\u003c\/p\u003e \u003cp\u003eBuilding a Shortcode with Content 364\u003c\/p\u003e \u003cp\u003eShortcode Tips 366\u003c\/p\u003e \u003cp\u003eThink Simplicity for the User 366\u003c\/p\u003e \u003cp\u003eRemember That Shortcodes are Dynamic 366\u003c\/p\u003e \u003cp\u003eLook under the Hood 367\u003c\/p\u003e \u003cp\u003eremove_shortcode() 367\u003c\/p\u003e \u003cp\u003eremove_all_shortcodes() 367\u003c\/p\u003e \u003cp\u003estrip_shortcodes() 367\u003c\/p\u003e \u003cp\u003edo_shortcode() 367\u003c\/p\u003e \u003cp\u003eWidgets 368\u003c\/p\u003e \u003cp\u003eCreating a Widget 368\u003c\/p\u003e \u003cp\u003eDashboard Widgets 377\u003c\/p\u003e \u003cp\u003eCreating Dashboard Widgets 378\u003c\/p\u003e \u003cp\u003eCreating a Dashboard Widget with Options 380\u003c\/p\u003e \u003cp\u003eRewrite Rules 384\u003c\/p\u003e \u003cp\u003eWhy Rewrite URLs 384\u003c\/p\u003e \u003cp\u003ePermalink Principles 384\u003c\/p\u003e \u003cp\u003eSearch Engine Friendly 384\u003c\/p\u003e \u003cp\u003eUser Friendly 385\u003c\/p\u003e \u003cp\u003eApache’s mod_rewrite 385\u003c\/p\u003e \u003cp\u003eURL Rewriting in WordPress 385\u003c\/p\u003e \u003cp\u003eHow WordPress Handles Queries 386\u003c\/p\u003e \u003cp\u003eOverview of the Query Process 386\u003c\/p\u003e \u003cp\u003eThe Rewrite Object 387\u003c\/p\u003e \u003cp\u003eThe Query Object 388\u003c\/p\u003e \u003cp\u003eWhat Plugins Can Do 389\u003c\/p\u003e \u003cp\u003ePractical Uses 389\u003c\/p\u003e \u003cp\u003eRewriting a URL to Create a List of Shops 389\u003c\/p\u003e \u003cp\u003eCreating a New Permalink Structure and Integrating Non-WordPress Pages 391\u003c\/p\u003e \u003cp\u003eThe Heartbeat API 395\u003c\/p\u003e \u003cp\u003eWhat is the Heartbeat API? 395\u003c\/p\u003e \u003cp\u003eUsing the Heartbeat API 395\u003c\/p\u003e \u003cp\u003eSending Data 395\u003c\/p\u003e \u003cp\u003eReceiving and Responding to Data 395\u003c\/p\u003e \u003cp\u003eProcessing the Response 396\u003c\/p\u003e \u003cp\u003eFull Heartbeat API Plugin 396\u003c\/p\u003e \u003cp\u003eSummary 398\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 15: Debugging 399\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCompatibility 399\u003c\/p\u003e \u003cp\u003eSupporting Many WordPress Versions 400\u003c\/p\u003e \u003cp\u003ePlaying Nicely with Other WordPress Plugins 401\u003c\/p\u003e \u003cp\u003eKeeping Current with WordPress Development 402\u003c\/p\u003e \u003cp\u003eDeprecation 404\u003c\/p\u003e \u003cp\u003eDealing with Obsolete Client Installs 404\u003c\/p\u003e \u003cp\u003eDebugging 405\u003c\/p\u003e \u003cp\u003eEnabling Debugging 406\u003c\/p\u003e \u003cp\u003eDisplaying Debug Output 406\u003c\/p\u003e \u003cp\u003eUnderstanding Debug Output 407\u003c\/p\u003e \u003cp\u003eError Logging 410\u003c\/p\u003e \u003cp\u003eEnabling Error Logging 410\u003c\/p\u003e \u003cp\u003eSetting Log File Location 411\u003c\/p\u003e \u003cp\u003eUnderstanding the Log File 411\u003c\/p\u003e \u003cp\u003eQuery Monitor 411\u003c\/p\u003e \u003cp\u003eSummary 414\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 16: The Developer Toolbox 415\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCore as Reference 415\u003c\/p\u003e \u003cp\u003ePHP Inline Documentation 416\u003c\/p\u003e \u003cp\u003eJavaScript Inline Documentation 417\u003c\/p\u003e \u003cp\u003eFinding Functions 417\u003c\/p\u003e \u003cp\u003eCommon Core Files 418\u003c\/p\u003e \u003cp\u003eformatting.php 418\u003c\/p\u003e \u003cp\u003efunctions.php 418\u003c\/p\u003e \u003cp\u003epluggable.php 419\u003c\/p\u003e \u003cp\u003eplugin.php 419\u003c\/p\u003e \u003cp\u003epost.php 419\u003c\/p\u003e \u003cp\u003euser.php 420\u003c\/p\u003e \u003cp\u003ePlugin Developer Handbook 420\u003c\/p\u003e \u003cp\u003eNavigating the Handbook 420\u003c\/p\u003e \u003cp\u003eCode Reference 420\u003c\/p\u003e \u003cp\u003eCodex 421\u003c\/p\u003e \u003cp\u003eSearching the Codex 421\u003c\/p\u003e \u003cp\u003eFunction Reference 422\u003c\/p\u003e \u003cp\u003eTool Websites 422\u003c\/p\u003e \u003cp\u003ePHPXref 422\u003c\/p\u003e \u003cp\u003eHooks Database 423\u003c\/p\u003e \u003cp\u003eCommunity Resources 424\u003c\/p\u003e \u003cp\u003eMake WordPress 424\u003c\/p\u003e \u003cp\u003eSupport Forums 424\u003c\/p\u003e \u003cp\u003eWordPress Slack 425\u003c\/p\u003e \u003cp\u003eWordPress Development Updates 425\u003c\/p\u003e \u003cp\u003eWordPress Ideas 426\u003c\/p\u003e \u003cp\u003eCommunity News Sites 426\u003c\/p\u003e \u003cp\u003eWordPress News 426\u003c\/p\u003e \u003cp\u003eWordPress Planet 426\u003c\/p\u003e \u003cp\u003ePost Status 426\u003c\/p\u003e \u003cp\u003eKnow the Code 426\u003c\/p\u003e \u003cp\u003eLinkedIn Learning 427\u003c\/p\u003e \u003cp\u003eTwitter 427\u003c\/p\u003e \u003cp\u003eLocal Events 427\u003c\/p\u003e \u003cp\u003eTools 427\u003c\/p\u003e \u003cp\u003eBrowser 427\u003c\/p\u003e \u003cp\u003eEditor 428\u003c\/p\u003e \u003cp\u003eNetBeans IDE 428\u003c\/p\u003e \u003cp\u003ePhpStorm 428\u003c\/p\u003e \u003cp\u003eNotepad++ 428\u003c\/p\u003e \u003cp\u003eTextMate 428\u003c\/p\u003e \u003cp\u003eSublime Text 428\u003c\/p\u003e \u003cp\u003eVisual Studio Code 429\u003c\/p\u003e \u003cp\u003eDeploying Files with FTP, SFTP, and SSH 429\u003c\/p\u003e \u003cp\u003ephpMyAdmin 429\u003c\/p\u003e \u003cp\u003eSummary 430\u003c\/p\u003e \u003cp\u003eIndex 431\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Internet guides \u0026amp; online services [\u003ca title=\"See our other books on Internet guides \u0026amp; online services\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Internet%20guides%20\u0026amp;%20online%20services%20%5BUDB%5D%22\"\u003eUDB\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wrox","offers":[{"title":"Brand New","offer_id":52460734087448,"sku":"9781119666943","price":27.86,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9781119666943.jpg?v=1785459764","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/professional-wordpress-plugin-development-paperback-softback-9781119666943","provider":"Freshly Printed Books","version":"1.0","type":"link"}