Table of Contents for
Building Web Apps with WordPress, 2nd Edition
Close
Version ebook
/
Retour
Building Web Apps with WordPress, 2nd Edition
by Jason Coleman
Published by O'Reilly Media, Inc., 2019
Cover
nav
Building Web Apps with WordPress
Building Web Apps with WordPress
Preface
Foreword
1. Building Web Apps with WordPress
2. WordPress Basics
3. Leveraging WordPress Plugins
4. Themes
5. Custom Post Types, Post Metadata, and Taxonomies
6. Users, Roles, and Capabilities
7. Working with WordPress APIs, Objects, and Helper Functions
8. Secure WordPress
9. JavaScript Frameworks and Workflow
10. WordPress REST API
11. WordPress Multisite Networks
12. Localizing WordPress Apps
13. WordPress Optimization and Scaling
14. Ecommerce
Preface
Who This Book Is For
Who This Book Is Not For
What You’ll Learn
About the Code
Conventions Used in This Book
Using Code Examples
O’Reilly Safari
How to Contact Us
Acknowledgments
Foreword
1. Building Web Apps with WordPress
What Is a Website?
What Is an App?
What Is a Web App?
Features of a Web App
Why Use WordPress?
You Are Already Using WordPress
Content Management Is Easy with WordPress
User Management Is Easy and Secure with WordPress
Plugins
Flexibility Is Important
Frequent Security Updates
Cost
.NET App
WordPress App
Responses to Some Common Criticisms of WordPress
When Not to Use WordPress
You Plan to License or Sell Your Site’s Technology
There Is Another Platform That Will Get You “There” Faster
Flexibility Is NOT Important to You
Your App Needs to Be Highly Real Time
WordPress as an Application Framework
WordPress Versus MVC Frameworks
Anatomy of a WordPress App
What Is SchoolPress?
SchoolPress Runs on a WordPress Multisite Network
The SchoolPress Business Model
Membership Levels and User Roles
Classes Are BuddyPress Groups
Assignments Are a Custom Post Type
Submissions Are a (Sub)CPT for Assignments
Semesters Are a Taxonomy on the Class CPT
Departments Are a Taxonomy on the Class CPT
SchoolPress Has One Main Custom Plugin
SchoolPress Uses a Few Other Custom Plugins
SchoolPress Uses the Memberlite Theme
2. WordPress Basics
WordPress Directory Structure
Root Directory
/wp-admin
/wp-includes
/wp-content
WordPress Database Structure
wp_options
Functions Found in /wp-includes/option.php
wp_users
Functions Found in /wp-includes/…
wp_usermeta
wp_posts
Functions found in /wp-includes/post.php
wp_postmeta
Functions Found in /wp-includes/post.php
wp_comments
Functions Found in /wp-includes/comment.php
wp_commentsmeta
Functions Found in /wp-includes/comment.php
wp_terms
Functions Found in /wp-includes/taxonomy.php
wp_termmeta
wp_term_taxonomy
/wp-includes/taxonomy.php
wp_term_relationships
Hooks: Actions and Filters
Actions
Filters
Development and Hosting Environments
Working Locally
Choosing a Web Host
Development, Staging, and Production Environments
Extending WordPress
3. Leveraging WordPress Plugins
The GPLv2 License
Installing WordPress Plugins
Building Your Own Plugin
File Structure for an App Plugin
/adminpages/
/classes/
/css/
/js/
/images/
/includes/
/includes/lib/
/pages/
/services/
/scheduled/
/schoolpress.php
Add-Ons to Existing Plugins
Use Cases and Examples
The WordPress Loop
WordPress Global Variables
Free Plugins
BadgeOS
Custom Post Type UI
Posts 2 Posts
Members
W3 Total Cache
Yoast SEO
Premium Plugins
Gravity Forms
Backup Buddy
WP All Import
Community Plugins
BuddyPress
4. Themes
Themes Versus Plugins
When Developing Apps
When Developing Plugins
When Developing Themes
The Template Hierarchy
Page Templates
Sample Page Template
Using Hooks to Copy Templates
When to Use a Theme Template
Theme-Related WP Functions
Using locate_template in Your Plugins
Style.css
Versioning Your Theme’s CSS Files
Functions.php
Themes and Custom Post Types
Popular Theme Frameworks
WP Theme Frameworks
Non-WP Theme Frameworks
Creating a Child Theme for Memberlite
Including Bootstrap in Your App’s Theme
Menus
Nav Menus
Dynamic Menus
Responsive Design
Device and Display Detection in CSS
Device and Feature Detection in JavaScript
Device Detection in PHP
Final Note on Browser Detection
5. Custom Post Types, Post Metadata, and Taxonomies
Default Post Types and Custom Post Types
Page
Post
Attachment
Revisions
Nav Menu Item
Defining and Registering Custom Post Types
register_post_type( $post_type, $args );
What Is a Taxonomy and How Should I Use It?
Taxonomies Versus Post Meta
Creating Custom Taxonomies
register_taxonomy( $taxonomy, $object_type, $args )
register_taxonomy_for_object_type( $taxonomy, $object_type )
Using Custom Post Types and Taxonomies in Your Themes and Plugins
The Theme Archive and Single Template Files
Good Old WP_Query and get_posts()
Metadata with CPTs
add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args )
Custom Wrapper Classes for CPTs
Extending WP_Post Versus Wrapping It
Why Use Wrapper Classes?
Keep Your CPTs and Taxonomies Together
Keep It in the Wrapper Class
Wrapper Classes Read Better
6. Users, Roles, and Capabilities
Getting User Data
Add, Update, and Delete Users
Hooks and Filters
What Are Roles and Capabilities?
Checking a User’s Role and Capabilities
Creating Custom Roles and Capabilities
Extending the WP_User Class
Adding Registration and Profile Fields
Customizing the Users Table in the Dashboard
Plugins
Theme My Login
Hide Admin Bar from Non-Admins
Paid Memberships Pro
PMPro Register Helper
Members
7. Working with WordPress APIs, Objects, and Helper Functions
Shortcode API
Shortcode Attributes
Nested Shortcodes
Removing Shortcodes
Other Useful Shortcode-Related Functions
Widgets API
Before You Add Your Own Widget
Adding Widgets
Defining a Widget Area
Embedding a Widget Outside of a Dynamic Sidebar
Dashboard Widgets API
Removing Dashboard Widgets
Adding Your Own Dashboard Widget
Settings API
Do You Really Need a Settings Page?
Could You Use a Hook or Filter Instead?
Use Standards When Adding Settings
Ignore Standards When Adding Settings
Rewrite API
Adding Rewrite Rules
Flushing Rewrite Rules
Other Rewrite Functions
WP-Cron
Adding Custom Intervals
Scheduling Single Events
Kicking Off Cron Jobs from the Server
Using Server Crons Only
WP Mail
Sending Nicer Emails with WordPress
File Header API
Adding File Headers to Your Own Files
Adding New Headers to Plugins and Themes
8. Secure WordPress
Why It’s Important
Security Basics
Update Frequently
Don’t Use the Username “admin”
Use a Strong Password
Examples of Bad Passwords
Examples of Good Passwords
Hardening Your WordPress Install
Don’t Allow Admins to Edit Plugins or Themes
Change Default Database Tables Prefix
Move wp-config.php
Hide Login Error Messages
Hide Your WordPress Version
Don’t Allow Logins via wp-login.php
Add Custom .htaccess Rules for Locking Down wp-admin
SSL Certificates and HTTPS
Installing an SSL Certificate on Your Server
WordPress Login and WordPress Admin over SSL
Debugging HTTPS Issues
Avoiding SSL Errors with the “Nuclear Option”
Backup Everything!
Scan Scan Scan!
Useful Security Plugins
Spam-Blocking Plugins
Backup Plugins
Firewall/Scanner Plugins
Login and Password-Protection Plugins
Writing Secure Code
Check User Capabilities
Custom SQL Statements
Data Validation, Sanitization, and Escaping
Nonces
9. JavaScript Frameworks and Workflow
What is ECMAScript
What is ES6
What is ES9
What Is AJAX?
What Is JSON?
jQuery and WordPress
Enqueuing Other JavaScript Libraries
Where to Put Your Custom JavaScript
AJAX Calls with WordPress and jQuery
Managing Multiple AJAX Requests
Heartbeat API
Initialization
Client-side JavaScript
Server-side PHP
Initialization
Client-side JavaScript
Server-side PHP
WordPress Limitations with Asynchronous Processing
Backbone.js
10. WordPress REST API
What is a REST API?
API
REST
HTTP Methods
JSON
Why Use the WP REST API?
Using the WP REST API V2
Discovery
Authentication
Routes/Endpoints
Requests
Responses
Schema
Controller Classes
Example: Using a Core API Endpoint
Example: Adding Your Own Routes and Endpoints
Plugins using the WP REST API
11. WordPress Multisite Networks
Why Multisite?
Setting Up a Multisite Network
Managing a Multisite Network
Dashboard
Sites
Users
Themes
Plugins
Settings
Updates
Multisite Database Structure
Network-Wide Tables
Individual Site Tables
Shared Site Tables
Domain Mapping
Hosting
Plugins
Random Useful Multisite Plugins
Gravity Forms User Registration Add-On
Blog Copier
More Privacy Options
Multisite Global Search
Multisite Robots.txt Manager
Basic Multisite Functionality
$blog_id
is_multisite()
get_current_blog_id()
switch_to_blog( $new_blog )
restore_current_blog()
get_blog_details( $fields = null, $get_all = true )
update_blog_details( $blog_id, $details = array() )
get_blog_status( $id, $pref )
update_blog_status( $blog_id, $pref, $value )
get_blog_option( $id, $option, $default = false )
update_blog_option( $id, $option, $value )
delete_blog_option( $id, $option )
get_blog_post( $blog_id, $post_id )
add_user_to_blog( $blog_id, $user_id, $role )
create_empty_blog( $domain, $path, $weblog_title, $site_id = 1 )
Functions We Didn’t Mention
12. Localizing WordPress Apps
Do You Even Need to Localize Your App?
How Localization Is Done in WordPress
Defining Your Locale in WordPress
Text Domains
Setting the Text Domain
Prepping Your Strings with Translation Functions
__($text, $domain = “default”)
_e($text, $domain = “default”)
_x($text, $context, $domain = “default”)
_ex($title, $context, $domain = “default”)
Escaping and Translating at the Same Time
Creating and Loading Translation Files
Our File Structure for Localization
Generating a .pot File
Creating a .po File
Creating a .mo File
GlotPress
Using GlotPress for Your WordPress.org Plugins and Themes
Creating Your Own GlotPress Server
13. WordPress Optimization and Scaling
Terms
Origin Versus Edge
Testing
What to Test
Chrome Debug Bar
Apache Bench
Siege
Blitz.io
W3 Total Cache
Page Cache Settings
Minify
Database Caching
Object Cache
CDNs
GZIP Compression
Hosting
WordPress-Specific Hosts
Rolling Your Own Server
Selective Caching
The Transient API
Multisite Transients
Using JavaScript to Increase Performance
Custom Tables
Bypassing WordPress
14. Ecommerce
Choosing a Plugin
WooCommerce
Paid Memberships Pro
Easy Digital Downloads
Payment Gateways
Merchant Accounts
Setting Up Software as a Service (SaaS) with Paid Memberships Pro
The Software as a Service Model
Step 0: Figure Out How You Want to Charge for Your App
Step 1: Installing and Activating Paid Memberships Pro
Step 2: Setting Up the Level
Step 3: Setting Up Pages
Step 4: Payment Settings
Step 5: Email Settings
Step 6: Advanced Settings
Step 7: Locking Down Pages
Step 8: Customizing Paid Memberships Pro