Details

Professional WordPress Plugin Development


Professional WordPress Plugin Development


2. Aufl.

von: Brad Williams, Justin Tadlock, John James Jacoby

32,99 €

Verlag: Wiley
Format: PDF
Veröffentl.: 26.05.2020
ISBN/EAN: 9781119666974
Sprache: englisch
Anzahl Seiten: 480

DRM-geschütztes eBook, Sie benötigen z.B. Adobe Digital Editions und eine Adobe ID zum Lesen.

Beschreibungen

<p><b>Extend WordPress with plugins using this advanced WordPress development book, updated for the current version</b></p> <p>This significantly updated edition of <i>Professional WordPress Plugin Development</i> 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.</p> <p>The second edition of <i>Professional WordPress Plugin Development</i> 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.</p> <p>•    Learn about the power of hooks in WordPress</p> <p>•    Discover how JavaScript and Ajax will work in your site</p> <p>•    Understand key technologies: Block Editor/Gutenberg, JS/React, PHP, and the REST API</p> <p>•    Create and use custom post types and taxonomies.</p> <p>•    Creating custom dashboard menus and plugin settings</p> <p>•    Work with users and user data</p> <p>•    Schedule tasks and utilizing Cron</p> <p>•    Performance and security considerations</p> <p>Written by experienced plugin developers, <i>Professional WordPress Plugin Development</i> 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.</p>
<p>Introduction xxxi</p> <p><b>Chapter 1: An Introduction to Plugins 1</b></p> <p>What is a Plugin? 1</p> <p>How Plugins Interact with WordPress 2</p> <p>When are Plugins Loaded? 3</p> <p>Available Plugins 4</p> <p>Official Plugin Directory 4</p> <p>Popular Plugin Examples 4</p> <p>Popular Plugin Tags 5</p> <p>Advantages of Plugins 5</p> <p>Not Modifying Core 5</p> <p>Why Reinvent the Wheel? 5</p> <p>Separating Plugins and Themes 6</p> <p>Easy Updates 7</p> <p>Easier to Share and Reuse 7</p> <p>Plugin Sandbox 7</p> <p>Plugin Community 7</p> <p>Installing and Managing Plugins 8</p> <p>Installing a Plugin 8</p> <p>Managing Plugins 9</p> <p>Editing Plugins 9</p> <p>Plugin Directories 9</p> <p>Types of Plugins 10</p> <p>Summary 11</p> <p><b>Chapter 2: Plugin Framework 13</b></p> <p>Requirements for Plugins 13</p> <p>Naming Your Plugin 14</p> <p>Using a Folder 14</p> <p>Best Practices 14</p> <p>Namespace Everything 14</p> <p>File Organization 15</p> <p>Folder Structure 16</p> <p>Plugin Header 17</p> <p>Creating the Header 17</p> <p>Plugin License 18</p> <p>Determining Paths 19</p> <p>Plugin Paths 19</p> <p>Local Paths 19</p> <p>URL Paths 20</p> <p>Activate/Deactivate Functions 22</p> <p>Plugin Activation Function 22</p> <p>Plugin Deactivation Function 23</p> <p>Deactivate is Not Uninstall 23</p> <p>Uninstall Methods 24</p> <p>Why Uninstall is Necessary 24</p> <p>Uninstall.php 24</p> <p>Uninstall Hook 25</p> <p>Coding Standards 25</p> <p>Document Your Code 26</p> <p>Naming Variables and Functions 27</p> <p>Naming Classes and Methods 27</p> <p>Naming Files 28</p> <p>Single and Double Quotes 28</p> <p>Indentation 28</p> <p>Brace Style 29</p> <p>Space Usage 29</p> <p>Shorthand PHP 30</p> <p>SQL Statements 30</p> <p>Summary 30</p> <p><b>Chapter 3: Dashboard And Settings 31</b></p> <p>Adding Menus and Submenus 31</p> <p>Creating a Top-Level Menu 32</p> <p>Adding a Submenu 33</p> <p>Adding a Menu Item to an Existing Menu 34</p> <p>Plugin Settings 36</p> <p>The Options API 36</p> <p>Saving Options 36</p> <p>Saving an Array of Options 37</p> <p>Updating Options 37</p> <p>Retrieving Options 38</p> <p>Loading an Array of Options 39</p> <p>Deleting Options 40</p> <p>The Autoload Parameter 40</p> <p>Segregating Plugin Options 41</p> <p>Toggling the Autoload Parameter 42</p> <p>The Settings API 42</p> <p>Benefits of the Settings API 42</p> <p>Settings API Functions 43</p> <p>Creating the Plugin Administration Page 43</p> <p>Registering New Settings 44</p> <p>Defining Sections and Settings 44</p> <p>Validating User Input 46</p> <p>Rendering the Form 47</p> <p>All Done! 48</p> <p>Wrapping It Up: A Complete Plugin Management Page 48</p> <p>Improving Feedback on Validation Errors 51</p> <p>Expanding with Additional Field Types 52</p> <p>Adding Fields to an Existing Page 59</p> <p>How It Works 59</p> <p>Adding a Section to an Existing Page 59</p> <p>Adding Only Fields 60</p> <p>WordPress’ Sections and Setting Fields 61</p> <p>User Interface Concerns 62</p> <p>Removing Settings 62</p> <p>Keeping It Consistent 63</p> <p>Using the WordPress UI 64</p> <p>Headings 64</p> <p>Dashicons 64</p> <p>Messages 65</p> <p>Buttons 66</p> <p>Form Fields 67</p> <p>Tables 68</p> <p>Pagination 69</p> <p>Summary 70</p> <p><b>Chapter 4: Security And Performance 71</b></p> <p>Security Overview 72</p> <p>What Securing Your Plugin is 72</p> <p>What Securing Your Plugin is Not 72</p> <p>User Permissions 72</p> <p>How to Check current_user_can() 73</p> <p>Do Not Check Too Early 73</p> <p>Nonces 74</p> <p>Authority vs. Intention 74</p> <p>What is a Nonce? 75</p> <p>How to Create and Verify Nonces 75</p> <p>Creating a Nonce URL 76</p> <p>Creating a Nonce Field 76</p> <p>Creating and Verifying a Nonce in a Plugin 77</p> <p>Data Validation and Sanitization 78</p> <p>The Need for Data Validation and Sanitization 78</p> <p>Good Practice: Identifying Potentially Tainted Data 80</p> <p>Validating or Sanitizing Input? 81</p> <p>Validating and Sanitizing Cookbook 81</p> <p>Integers 81</p> <p>Arbitrary Text Strings 82</p> <p>Key and Identifier Strings 83</p> <p>Email Strings 84</p> <p>URLs 84</p> <p>HTML 86</p> <p>JavaScript 88</p> <p>Environment and Server Variables 88</p> <p>Arrays of Data 89</p> <p>Database Queries 89</p> <p>Formatting SQL Statements 90</p> <p>The $wpdb Object 90</p> <p>Why wpdb Methods are Superior 91</p> <p>All-in-One Methods 91</p> <p>$wpdb->update() 92</p> <p>$wpdb->insert() 92</p> <p>Common Methods 93</p> <p>Select a Variable 93</p> <p>Select a Row 94</p> <p>Select a Column 94</p> <p>Select Generic Results 95</p> <p>Generic Queries 96</p> <p>Protecting Queries against SQL Injections 96</p> <p>Security Good Habits 97</p> <p>Performance Overview 97</p> <p>Caching 98</p> <p>Saving Cached Data 98</p> <p>Loading and Using Cached Data 99</p> <p>Deleting Cached Data 99</p> <p>Caching Data within a Plugin 100</p> <p>Transients 101</p> <p>Saving an Expiring Option 102</p> <p>Retrieving an Expiring Option 102</p> <p>Deleting an Expiring Option 102</p> <p>A Practical Example Using Transients 102</p> <p>Technical Details 103</p> <p>Transient Ideas 103</p> <p>Summary 104</p> <p><b>Chapter 5: Hooks 105</b></p> <p>Understanding Hooks 105</p> <p>Actions 106</p> <p>What is an Action? 107</p> <p>Action Hook Functions 108</p> <p>remove_action() 108</p> <p>remove_all_actions() 109</p> <p>do_action_ref_array 110</p> <p>has_action 111</p> <p>did_action() 112</p> <p>current_action 112</p> <p>register_activation_hook and register_deactivation_hook 113</p> <p>Commonly Used Action Hooks 113</p> <p>plugins_loaded 113</p> <p>init 114</p> <p>admin_menu 115</p> <p>save_post 116</p> <p>wp_head 116</p> <p>Filters 117</p> <p>What is a Filter? 118</p> <p>Filter Hook Functions 119</p> <p>remove_filter 119</p> <p>remove_all_filters 120</p> <p>apply_filters_ref_array 121</p> <p>has_filter 122</p> <p>current_filter 122</p> <p>Quick Return Functions 123</p> <p>Commonly Used Filter Hooks 124</p> <p>the_content 124</p> <p>template_include 125</p> <p>Using Hooks from within a Class 126</p> <p>Using Hooks with Anonymous Functions 127</p> <p>Creating Custom Hooks 128</p> <p>Benefits of Creating Custom Hooks 128</p> <p>Custom Action Hook Example 128</p> <p>Custom Filter Hook Example 129</p> <p>Finding Hooks 129</p> <p>Searching for Hooks in the Core Code 130</p> <p>Variable Hooks 130</p> <p>Hook Reference Lists 130</p> <p>Summary 131</p> <p><b>Chapter 6: Javascript 133</b></p> <p>Registering Scripts 134</p> <p>Enqueueing Scripts 135</p> <p>Limiting Scope 136</p> <p>Localizing Scripts 136</p> <p>Inline Scripts 137</p> <p>Overview of Bundled Scripts 139</p> <p>jQuery UI and Other Scripts 139</p> <p>The WP Global 140</p> <p>a11y Speak 140</p> <p>Escaping 140</p> <p>i18n 140</p> <p>Heartbeat 141</p> <p>Polyfills 141</p> <p>Your Custom Scripts 141</p> <p>jQuery 142</p> <p>Benefits of Using jQuery 142</p> <p>jQuery Crash Course 142</p> <p>The jQuery Object 143</p> <p>Syntax and Chaining 143</p> <p>No-Conflict Mode in WordPress 144</p> <p>Launching Code on Document Ready 144</p> <p>Ajax 145</p> <p>Backbone/Underscore 146</p> <p>React 146</p> <p>Summary 147</p> <p><b>Chapter 7: Blocks And Gutenberg 149</b></p> <p>What is Gutenberg? 149</p> <p>Touring Gutenberg 151</p> <p>Practical Examples 155</p> <p>WooCommerce 156</p> <p>The Events Calendar 157</p> <p>Post Type Switcher 158</p> <p>Technology Stack of Gutenberg 159</p> <p>JavaScript 160</p> <p>PHP 161</p> <p>Node.js 162</p> <p>webpack 163</p> <p>Babel 163</p> <p>React 163</p> <p>JSX 163</p> <p>ES6 163</p> <p>“Hello World!” Block 164</p> <p>PHP 164</p> <p>JavaScript 164</p> <p>webpack 165</p> <p>Command Line 166</p> <p>Activation 167</p> <p>Wrap-Up 167</p> <p>WP-CLI Scaffolding 168</p> <p>Plugin 168</p> <p>Blocks 169</p> <p>Includes 169</p> <p>Activation 169</p> <p>Wrap-Up 169</p> <p>create-guten-block Toolkit 170</p> <p>Installation 171</p> <p>Activation 171</p> <p>Wrap-Up 173</p> <p>Block Directory 173</p> <p>Summary 174</p> <p><b>Chapter 8: Content 175</b></p> <p>Creating Custom Post Types 176</p> <p>Post Type Possibilities 176</p> <p>Registering a Post Type 177</p> <p>register_post_type 177</p> <p>Registering the Book Collection Post Type 177</p> <p>Setting Post Type Labels 179</p> <p>Using Custom Capabilities 180</p> <p>Attaching Existing Taxonomies 182</p> <p>Post Metadata 183</p> <p>Registering Post Metadata 183</p> <p>Adding Post Metadata 184</p> <p>Retrieving Post Metadata 185</p> <p>Updating Post Metadata 186</p> <p>Deleting Post Metadata 186</p> <p>Meta Boxes 187</p> <p>What is a Meta Box? 187</p> <p>Adding a Custom Meta Box 188</p> <p>Saving Meta Box Data 190</p> <p>Creating Custom Taxonomies 191</p> <p>Understanding Taxonomies 192</p> <p>Registering a Custom Taxonomy 192</p> <p>register_taxonomy 193</p> <p>Registering the Genre Taxonomy 193</p> <p>Assigning a Taxonomy to a Post Type 194</p> <p>Using Custom Taxonomies 195</p> <p>Retrieving a Taxonomy 196</p> <p>Using a Taxonomy with Posts 196</p> <p>Taxonomy Conditional Tags 197</p> <p>taxonomy_exists 197</p> <p>is_taxonomy_hierarchical 198</p> <p>is_tax 198</p> <p>A Post Type, Post Metadata, and Taxonomy Plugin 199</p> <p>Summary 204</p> <p><b>Chapter 9: Users And User Data 205</b></p> <p>Working with Users 206</p> <p>User Functions 206</p> <p>is_user_logged_in() 206</p> <p>get_users() 207</p> <p>count_users 207</p> <p>Creating, Updating, and Deleting Users 208</p> <p>Creating a New User 209</p> <p>Updating an Existing User 211</p> <p>Deleting an Existing User 212</p> <p>User Data 213</p> <p>Getting a User Object and Data 213</p> <p>Getting the Current User Object 215</p> <p>Getting User Post Counts 215</p> <p>User Metadata 217</p> <p>Adding User Metadata 218</p> <p>Retrieving User Metadata 218</p> <p>Updating User Metadata 219</p> <p>Deleting User Metadata 220</p> <p>Creating a Plugin with User Metadata 220</p> <p>Roles and Capabilities 223</p> <p>What are Roles and Capabilities? 223</p> <p>Default Roles 224</p> <p>Custom Roles 224</p> <p>Limiting Access 225</p> <p>Checking User Permissions 225</p> <p>Is the User an Admin? 227</p> <p>Customizing Roles 228</p> <p>Creating a Role 228</p> <p>Deleting a Role 230</p> <p>Adding Capabilities to a Role 230</p> <p>Removing Capabilities from a Role 231</p> <p>A Custom Role and Capability Plugin 231</p> <p>Summary 233</p> <p><b>Chapter 10: Scheduled Tasks 235</b></p> <p>What is Cron? 235</p> <p>How is Cron Executed? 236</p> <p>Scheduling Cron Events 236</p> <p>Scheduling a Recurring Event 236</p> <p>Scheduling a Single Event 238</p> <p>Unscheduling an Event 240</p> <p>Specifying Your Own Cron Intervals 241</p> <p>Viewing Scheduled Cron Events 242</p> <p>True Cron 247</p> <p>Practical Use 247</p> <p>The Blog Pester Plugin 247</p> <p>Deleting Post Revisions Weekly 250</p> <p>The Delete Comments Plugin 253</p> <p>Summary 258</p> <p><b>Chapter 11: Internationalization 259</b></p> <p>Internationalization and Localization 260</p> <p>Why Internationalize? 260</p> <p>Understanding Internationalization in Professional Work 261</p> <p>Getting Your Plugin Ready for Translation 261</p> <p>Echoing and Returning Strings 262</p> <p>The __() Function 262</p> <p>The _e() Function 263</p> <p>The esc_attr__() Function 263</p> <p>The esc_attr_e() Function 264</p> <p>The esc_html__() Function 264</p> <p>The esc_html_e() Function 264</p> <p>The _x() Function 264</p> <p>The _ex() Function 265</p> <p>The esc_attr_x() Function 266</p> <p>The esc_html_x() Function 266</p> <p>The _n() Function 267</p> <p>The _nx() Function 268</p> <p>The _n_noop() Function 269</p> <p>The _nx_noop() Function 270</p> <p>Using Placeholders 271</p> <p>Internationalizing JavaScript 273</p> <p>Developer Handbook Resource 275</p> <p>Creating Translation Files 275</p> <p>The MO and PO Files 276</p> <p>Translation Tools 276</p> <p>How to Create a POT File 277</p> <p>Command Line 278</p> <p>Where to Store Translation Files 278</p> <p>Summary 278</p> <p><b>Chapter 12: Rest Api 279</b></p> <p>What the REST API is 279</p> <p>What You Can Do with the REST API 280</p> <p>Accessing the WordPress REST API 281</p> <p>Default Endpoints 282</p> <p>REST API Clients 283</p> <p>Insomnia 283</p> <p>Postman 283</p> <p>Authentication 284</p> <p>Enhanced Authentication 285</p> <p>Custom Endpoints 286</p> <p>The HTTP API 289</p> <p>What is an HTTP Request? 289</p> <p>HTTP Request Concepts 289</p> <p>Dissecting an HTTP Transaction 289</p> <p>Some Caveats on Checking HTTP Responses 291</p> <p>Possibilities for Crafting HTTP Requests 292</p> <p>How to Make HTTP Requests in PHP 292</p> <p>Using the HTTP Extension 292</p> <p>Using fopen() Streams 293</p> <p>Using a Standard fopen() 293</p> <p>Using fsockopen() 293</p> <p>Using the CURL Extension 294</p> <p>Too Many Ways? 294</p> <p>WordPress’ HTTP Functions 294</p> <p>The wp_remote_ Functions 294</p> <p>wp_remote_* Input Parameters 295</p> <p>wp_remote_* Return Values 297</p> <p>wp_remote_ Companion Functions 302</p> <p>Advanced Configuration and Tips 303</p> <p>Proxy Support 303</p> <p>Filtering Requests and Responses 304</p> <p>Bringing It All Together 307</p> <p>Create 307</p> <p>Update 309</p> <p>Delete 309</p> <p>Resources 313</p> <p>Summary 313</p> <p><b>Chapter 13: Multisite 315</b></p> <p>Terminology 316</p> <p>Advantages of Multisite 317</p> <p>Enabling Multisite in WordPress 317</p> <p>Multisite Functions 319</p> <p>The Site ID 319</p> <p>Common Functions 319</p> <p>Switching and Restoring Sites 321</p> <p>Network Content Shortcode Examples 325</p> <p>A Network Content Widget Example 330</p> <p>Creating a New Site 336</p> <p>Site Options 342</p> <p>Network Options 342</p> <p>Site Meta 343</p> <p>Users and Roles 343</p> <p>Super Admin 348</p> <p>Checking the Site Owner 349</p> <p>Network Stats 350</p> <p>Database Schema 350</p> <p>Multisite-Specific Tables 350</p> <p>Site-Specific Tables 351</p> <p>Query Classes 351</p> <p>WP_Site_Query 351</p> <p>WP_Network_Query 352</p> <p>Object Classes 352</p> <p>WP_Site 352</p> <p>WP_Network 352</p> <p>Summary 352</p> <p><b>Chapter 14: The Kitchen Sink 353</b></p> <p>Querying and Displaying Posts 353</p> <p>Use Case for Displaying Posts 354</p> <p>WP_Query Overview 354</p> <p>The Loop 355</p> <p>Shortcodes 358</p> <p>What Shortcodes are 358</p> <p>Register Custom Shortcodes 359</p> <p>Building a Simple Shortcode 360</p> <p>Building a Shortcode with Parameters 362</p> <p>Building a Shortcode with Content 364</p> <p>Shortcode Tips 366</p> <p>Think Simplicity for the User 366</p> <p>Remember That Shortcodes are Dynamic 366</p> <p>Look under the Hood 367</p> <p>remove_shortcode() 367</p> <p>remove_all_shortcodes() 367</p> <p>strip_shortcodes() 367</p> <p>do_shortcode() 367</p> <p>Widgets 368</p> <p>Creating a Widget 368</p> <p>Dashboard Widgets 377</p> <p>Creating Dashboard Widgets 378</p> <p>Creating a Dashboard Widget with Options 380</p> <p>Rewrite Rules 384</p> <p>Why Rewrite URLs 384</p> <p>Permalink Principles 384</p> <p>Search Engine Friendly 384</p> <p>User Friendly 385</p> <p>Apache’s mod_rewrite 385</p> <p>URL Rewriting in WordPress 385</p> <p>How WordPress Handles Queries 386</p> <p>Overview of the Query Process 386</p> <p>The Rewrite Object 387</p> <p>The Query Object 388</p> <p>What Plugins Can Do 389</p> <p>Practical Uses 389</p> <p>Rewriting a URL to Create a List of Shops 389</p> <p>Creating a New Permalink Structure and Integrating Non-WordPress Pages 391</p> <p>The Heartbeat API 395</p> <p>What is the Heartbeat API? 395</p> <p>Using the Heartbeat API 395</p> <p>Sending Data 395</p> <p>Receiving and Responding to Data 395</p> <p>Processing the Response 396</p> <p>Full Heartbeat API Plugin 396</p> <p>Summary 398</p> <p><b>Chapter 15: Debugging 399</b></p> <p>Compatibility 399</p> <p>Supporting Many WordPress Versions 400</p> <p>Playing Nicely with Other WordPress Plugins 401</p> <p>Keeping Current with WordPress Development 402</p> <p>Deprecation 404</p> <p>Dealing with Obsolete Client Installs 404</p> <p>Debugging 405</p> <p>Enabling Debugging 406</p> <p>Displaying Debug Output 406</p> <p>Understanding Debug Output 407</p> <p>Error Logging 410</p> <p>Enabling Error Logging 410</p> <p>Setting Log File Location 411</p> <p>Understanding the Log File 411</p> <p>Query Monitor 411</p> <p>Summary 414</p> <p><b>Chapter 16: The Developer Toolbox 415</b></p> <p>Core as Reference 415</p> <p>PHP Inline Documentation 416</p> <p>JavaScript Inline Documentation 417</p> <p>Finding Functions 417</p> <p>Common Core Files 418</p> <p>formatting.php 418</p> <p>functions.php 418</p> <p>pluggable.php 419</p> <p>plugin.php 419</p> <p>post.php 419</p> <p>user.php 420</p> <p>Plugin Developer Handbook 420</p> <p>Navigating the Handbook 420</p> <p>Code Reference 420</p> <p>Codex 421</p> <p>Searching the Codex 421</p> <p>Function Reference 422</p> <p>Tool Websites 422</p> <p>PHPXref 422</p> <p>Hooks Database 423</p> <p>Community Resources 424</p> <p>Make WordPress 424</p> <p>Support Forums 424</p> <p>WordPress Slack 425</p> <p>WordPress Development Updates 425</p> <p>WordPress Ideas 426</p> <p>Community News Sites 426</p> <p>WordPress News 426</p> <p>WordPress Planet 426</p> <p>Post Status 426</p> <p>Know the Code 426</p> <p>LinkedIn Learning 427</p> <p>Twitter 427</p> <p>Local Events 427</p> <p>Tools 427</p> <p>Browser 427</p> <p>Editor 428</p> <p>NetBeans IDE 428</p> <p>PhpStorm 428</p> <p>Notepad++ 428</p> <p>TextMate 428</p> <p>Sublime Text 428</p> <p>Visual Studio Code 429</p> <p>Deploying Files with FTP, SFTP, and SSH 429</p> <p>phpMyAdmin 429</p> <p>Summary 430</p> <p>Index 431</p>
<p><b>About the authors</b> <p><b>Brad Williams</b> is CEO and cofounder of WebDevStudios, a WordPress design and development firm. He is coauthor of <i>Professional WordPress Design and Development.</i> <p><b>Justin Tadlock</b> is a plugin and theme developer with over a decade of professional experience. He currently writes for WP Tavern. <p><b>John James Jacoby</b> has authored dozens of popular WordPress plugins and leads the development of bbPress and BuddyPress. He has contributed to every major WordPress version since 2008.
<p><b>Required reading for WordPress plugin developers</b> <p>This is one of the most extensive available resources on developing plugins for WordPress—the world's most popular web content management system. The authors have prepared this updated edition, which builds from the basics of plugin development to more advanced scenarios. You'll follow a hands-on approach, with real-world examples covering situations you'll encounter as you develop custom plugins for your clients or your own sites. Additionally, you'll learn to write future-proof code that will continue to function well for years to come. <p><i>Professional WordPress Plugin Development:</i> <ul> <li>Introduces you to plugin development with the WordPress plugin framework, coding standards, and hooks</li> <li>Covers essential topics in plugin development, including plugin security, scalability and performance, working with user data, and internationalization</li> <li>Reveals best practices for using advanced APIs including building custom Gutenberg block editor blocks, the REST API, and functions to extend WordPress functionality</li> <li>Describes how to code plugins using PHP, JavaScript, and modern web technologies</li> <li>Delivers tips and techniques for debugging and optimizing your new plugins, as well as guidance on releasing your plugins to the public</li> </ul> <p><b>Wrox Professional guides</b> are planned and written by working programmers to meet the real-world needs of programmers, developers, and IT professionals. Focused and relevant, they address the issues technology professionals face every day. They provide examples, practical solutions, and expert education in new technologies, all designed to help programmers do a better job.

Diese Produkte könnten Sie auch interessieren:

Professional WordPress
Professional WordPress
von: Brad Williams, David Damstra, Hal Stern
PDF ebook
32,99 €
Internet für Senioren für Dummies
Internet für Senioren für Dummies
von: Sandra Weber
EPUB ebook
17,99 €
Facebook Marketing
Facebook Marketing
von: Chris Treadaway, Mari Smith
PDF ebook
23,99 €