WordPress Web Application Development - Rakhitha Nimesh Ratnayake - E-Book

WordPress Web Application Development E-Book

Rakhitha Nimesh Ratnayake

0,0
34,79 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Developing WordPress-powered websites is one of the standout trends in the modern web development world. The flexibility and power of the built-in features offered by WordPress has made developers turn their attentions to the possibility of using it as a web development framework. This book will act as a comprehensive resource for building web applications with this amazing framework.

"WordPress Web Application Development" is a comprehensive guide focused on incorporating the existing features of WordPress into typical web development. This book is structured towards building a complete web application from scratch. With this book, you will build an application with a modularized structure supported by the latest trending technologies.

"Wordpress Web Application Development" provides a comprehensive, practical, and example-based approach for pushing the limits of WordPress for web applications beyond your imagination.

This book begins by exploring the role of existing WordPress components and discussing the reasons for choosing WordPress for web application development. As we proceed, more focus will be put into adapting WordPress features into web applications with the help of an informal use-case-based model for discussing the most prominent built-in features. While striving for web development with WordPress, you will also learn about the integration of popular client-side technologies such as Backbone, Underscore, and jQuery, and server-side technologies and techniques such as template engines, RSS feeds, Open Auth integration, and more.

After reading this book, you will possess the ability to develop powerful web applications rapidly within limited time frames with the crucial advantage of benefitting low-budget and time-critical projects.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 455

Veröffentlichungsjahr: 2013

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

WordPress Web Application Development
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers and more
Why Subscribe?
Free Access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. WordPress As a Web Application Framework
WordPress as a CMS
WordPress as a web development framework
MVC versus event-driven architecture
Simplifying development with built-in modules
Identifying the components of WordPress
The role of the WordPress theme
The structure of a WordPress page layout
Customizing the application layout
The role of the admin dashboard
Admin dashboard
Posts and pages
Users
Appearance
Settings
The role of plugins
The role of widgets
A development plan for a portfolio management application
Application goals and a target audience
Planning the application
User roles of the application
Planning application features and functions
Understanding limitations and sticking with guidelines
Building a question-answer interface
Prerequisites
Creating questions
Changing the status of answers
Saving the status of answers
Generating the question list
Summary
2. Implementing Membership Roles, Permissions, and Features
Introduction to user management
Preparing the plugin
Getting started on user roles
Creating user roles for a application
What is the best action for adding user roles?
Knowing the default roles
How to choose between default and custom roles?
Scenario 1
Scenario 2
Removing existing user roles
Understanding user capabilities
Creating your first capability
Understanding default capabilities
Registering application users
Implementing the frontend registration
Shortcode implementation
Pros and cons of using shortcodes
Page template implementation
Pros and cons of page templates
Custom template implementation
Building a simple router for user modules
Creating the routing rules
Adding query variables
Flushing the rewriting rules
Controlling access to your functions
What are the advantages of using do_action?
Creating custom templates
Designing the registration form
Planning the registration process
Handling registration form submission
Activating system users
Creating a login on the frontend
Displaying a login form
Time to practice
Summary
3. Planning and Customizing the Core Database
Understanding the WordPress database
Exploring the role of existing tables
User-related tables
Post-related tables
Term-related tables
Other tables
Adapting existing tables into web applications
User-related tables
Post-related tables
Scenario 1 – an online shopping cart
Scenario 2 – hotel reservation system
Scenario 3 – project management application
Term-related tables
Other tables
Extending a database with custom tables
Planning the portfolio application tables
Types of tables in web applications
Creating custom tables
Querying the database
Querying the existing tables
Inserting records
Updating records
Deleting records
Selecting records
Querying the custom tables
Working with posts
Extending WP_Query for applications
Limitations and considerations
Transaction support
Post revisions
How to know whether to enable or disable revisions
Autosaving
Using metatables
Summary
4. The Building Blocks of Web Applications
Introduction to custom content types
The role of custom post types in web applications
Planning custom post types for the application
Projects
Services
Articles
Books
Implementing custom post types for a portfolio application
Implementing the custom post type settings
Creating a projects class
Assigning permissions to projects
Creating custom taxonomies for technologies and types
Assigning permissions to project type
Introduction to custom fields with meta boxes
What is a template engine?
Configuring Twig templates
Creating your first Twig template
Persisting custom field data
Customizing custom post type messages
Passing data to Twig templates
Introduction to custom post type relationships
Pods framework for custom content types
Should you choose Pods for web development?
Time to practice
Summary
5. Developing Pluggable Modules
A brief introduction to WordPress plugins
Understanding the WordPress plugin architecture
WordPress plugins for web development
Create reusable libraries with plugins
How to use AJAX in WordPress
Creating an AJAX request using jQuery
Defining AJAX requests
Drawbacks in a normal process
Planning the AJAX plugin
Creating the plugin
Including plugin scripts for AJAX
Creating reusable AJAX requests
Extensible plugins
Planning the file uploader for portfolio application
Creating the extensible file uploader plugin
Converting file fields with jQuery
Integrating the media uploader to buttons
Extending the file uploader plugin
Customizing the allowed types of images
Saving and loading project screens
Pluggable plugins
Time to practice
Summary
6. Customizing the Dashboard for Powerful Backends
Understanding the admin dashboard
Customizing the admin toolbar
Removing the admin toolbar
Managing the admin toolbar items
Customizing the main navigation menu
Creating new menu items
Adding features with custom pages
Building options pages
Automating option pages with SMOF
Customizing the options page to use as a generic settings page
Building the application options panel
Using the WordPress Options API
Using feature-packed admin list tables
Building extended lists
Using an admin list table for following developers
Step 1 – defining the custom class
Step 2 – defining instance variables
Step 3 – creating the initial configurations
Step 4 – implementing custom column handlers
Step 5 – implementing column default handlers
Step 6 – displaying the checkbox for records
Step 7 – listing the available custom columns
Step 8 – defining the sortable columns of the list
Step 9 – creating a list of bulk actions
Step 10 – retrieving list data
Step 11 – adding the custom list as a menu page
Step 12 – displaying the generated list
An awesome visual presentation for the admin dashboard
The responsive nature of the admin dashboard
Time for action
Summary
7. Adjusting Themes for Amazing Frontends
Introduction to a WordPress application's frontend
Basic file structure of a WordPress theme
Understanding template execution hierarchy
Template execution process of web application frameworks
Web application layout creation techniques
Shortcodes and page templates
Custom templates with custom routing
Using pure PHP templates
The WordPress way of using templates
Direct template inclusion
Theme versus plugin templates
Are you planning to create an application-specific theme?
Template engines
Building a portfolio application's home page
What is a widget?
Widgetizing application layouts
Creating widgets
Creating a custom template loader
Designing the home page template
Generating an application's frontend menu
Creating a navigation menu
Displaying user-specific menus on the frontend
Creating pluggable and extendable templates
Pluggable or extendable templates
Extendable templates in web applications
Pluggable templates in WordPress
Comparing WordPress templates with Twig templates
Extending the home page template with action hooks
Customize widgets to enable extendable locations
Planning action hooks for layouts
Time for action
Summary
8. Enhancing the Power of Open Source Libraries and Plugins
Why choose open source libraries?
Open source libraries inside the WordPress core
Open source JavaScript libraries in the WordPress core
What is Backbone.js?
Understanding the importance of code structuring
Integrating Backbone.js and Underscore.js
Creating a developer profile page with Backbone.js
Structuring with Backbone.js and Underscore.js
Displaying the projects list on page load
Creating new projects from the frontend
Integrating events to the Backbone.js views
Validating and creating new models on the server
Creating new models on the server
Using PHPMailer for custom e-mail sending
Usage of PHPMailer within the WordPress core
Creating a custom version of the pluggable wp_mail function
Loading PHPMailer inside plugins and creating custom functions
Implementing user authentication with Opauth
Configuring login strategies
Building a LinkedIn app
Process of requesting the strategies
Initializing the Opauth library
Authenticating users in our application
Using third-party libraries and plugins
Time for action
Summary
9. Listening to Third-party Applications
Introduction to APIs
Advantages of having an API
WordPress XML-RPC API for web applications
Building the API client
Creating a custom API
Integrating API user authentication
Integrating API access tokens
Providing the API documentation
Time for action
Summary
10. Integrating and Finalizing the Portfolio Management Application
Integrating and structuring a portfolio application
Step 1 – deactivating all the plugins used in this book
Step 2 – creating a new standalone plugin
Step 3 – moving all the plugins into wpwa-web-application
Step 4 – removing plugin definitions
Step 5 – creating common folders
Step 6 – loading components to the main plugin
Step 7 – creating the template loader
Step 8 – reusing the autoloader
Step 9 – defining main plugin functions
Step 10 – building the template router
Step 11 – building the activation controller
Step 12 – building the script controller
Step 13 – building the admin menu controller
Step 14 – creating class initializations
Step 15 – initializing application controllers
Restructuring the custom post manager
Integrating a template loader into the user manager
Working with a restructured application
Building the developer model
Designing the developer list template
Enabling AJAX-based filtering
Updating a user profile with additional fields
Updating values of profile fields
Scheduling subscriber notifications
Notifying subscribers through an e-mail
Lesser-known WordPress features
Caching
Transients
Testing
Security
Time for action
Final thoughts
Summary
A. Configurations, Tools, and Resources
Configure and set up WordPress
Step 1 – downloading WordPress
Step 2 – creating the application folder
Step 3 – configuring the application URL
Creating a virtual host
Using a localhost
Step 4 – installing WordPress
Step 5 – setting up permalinks
Step 6 – downloading the Responsive theme
Step 7 – activating the Responsive theme
Step 8 – activating the plugin
Step 9 – using the application
Open source libraries and plugins
Online resources and tutorials
Index

WordPress Web Application Development

WordPress Web Application Development

Copyright © 2013 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

First published: November 2013

Production Reference: 1111113

Published by Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK.

ISBN 978-1-78328-075-9

www.packtpub.com

Cover Image by William Kewley (<[email protected]>)

Credits

Author

Rakhitha Nimesh Ratnayake

Reviewers

Rudolf Boogerman

Michael Cannon

Geert De Deckere

Benjamin Moody

Doug Sparling

Acquisition Editors

Saleem Ahmed

Sam Wood

Lead Technical Editor

Balaji Naidu

Technical Editors

Manan Badani

Pankaj Kadam

Krutika Parab

Copy Editors

Mradula Hegde

Gladson Monteiro

Kirti Pai

Lavina Pereira

Laxmi Subramanian

Project Coordinators

Abhijit Suvarna

Proofreaders

Maria Gould

Simran Bhogal

Paul Hindle

Indexer

Hemangini Bari

Graphics

Ronak Dhruv

Abhinash Sahu

Production Coordinator

Arvindkumar Gupta

Cover Work

Arvindkumar Gupta

About the Author

Rakhitha Nimesh Ratnayake is a freelance web developer, writer, and an open source enthusiast.

He also provides technical consultation on large scale web applications to one of the leading software development firms in Sri Lanka.

Rakhitha is the creator of www.innovativephp.com, where he writes tutorials on the latest web development and design technologies. He is also a regular contributor to a number of popular websites such as 1stwebdesigner, the Tuts+ network, and the SitePoint network. Building Impressive Presentations with impress.js was his first book, also published by Packt Publishing.

In his spare time, he likes to watch cricket and spend time with his family. Make sure you visit him online at www.innovativephp.com and follow him on Google+ at http://goo.gl/UiEf5B.

I would like to thank my parents and my brother for the encouragement and help they provided throughout the various tasks in this book. Also, I would like to thank my family members and friends at Providence for consistently motivating me to complete my second book for Packt Publishing.

I would also like to thank the Packt Publishing team members; Parita Khedekar for inviting me to write this book, Erol Staveley and Saleem Ahmed for the support throughout the book as Acquisition Editors, Abhijit Suvarna for being the Project Coordinator of the book, and the reviewers for providing honest feedback to improve the book.

Finally, I would like to thank you for reading my book and being one of the most important people who helped me make this book a success.

About the Reviewers

Rudolf Boogerman is of Dutch origin, born in England, and has lived in Belgium since 2007. He first studied graphic arts, but learned several programming/scripting languages hands-on, starting from 1990. From then on, he primarily developed multimedia presentations for a wide variety of projects worldwide.

In 1997 he created his first site, www.raboo.info, to show his own artwork. After this first experience on the Web, he got very excited and decided to combine his artistic background with web development. For the past 5 years, he has been primarily working with WordPress and Joomla! and developing plugins/extensions for both platforms.

Rudolf is the founder of Raboo Design (a visual communication agency), Footprint Visual Communication (visual communication agency), Footprint add-ons (extensions for Joomla!), WP 21 century (plugins for WordPress), and Miracle Tutorials (a blog with step-by-step advice on video and audio on the Web).

Michael Cannon, Peichi's smiling man, is an adventurous water rat, Chief People Officer, cyclist, full stack developer, poet, WWOOFer, and a world traveler. At his core, he is the happiest of all being productive, doing something different, living simply, and sharing with people.

Through Aihrus, he supports TYPO3 and WordPress clients; develops software-based products; and provides business, IT, and software development mentoring.

As Axelerant's Chief People Officer, he gets to collaborate with awesome teammates and smart folks as part of exciting open source projects, even as he continues to explore the world.

Germany, India, and Taiwan have been his homes since 2008. He has visited an average of five countries every year since 2005. In 2012, it was 14 countries. In 2013, nine countries have padded his feet or his bicycle wheels so far.

Geert De Deckere is a web developer living in Belgium. Around 10 years ago, he wrote his first lines of PHP. He loves to code and play around with ever-evolving web technologies such as WordPress. Apart from that, he also enjoys cycling (especially in the mountains), cooking, working in his vegetable garden, and playing an occasional game of chess. His personal website can be found at http://geertdedeckere.be/.

Geert was also a technical reviewer of Kohana 3.0 Beginner's Guide, which is published by Packt Publishing.

Benjamin Moody is a web developer who started using WordPress way back in 2005. Since then, he has developed several custom plugins and themes for clients across North America, as well as a number of WordPress-based web applications. When not coding for clients, Benjamin works on personal application projects and can be found providing support at Toronto WordCamp Happiness Bar.

Doug Sparling works as a web and mobile software developer for Andrews McMeel Universal, a publishing and syndication company in Kansas City, MO. As a long-time employee of the company, he has built everything from the GoComics Android app to its registration, e-commerce systems, web services, and various websites using Ruby on Rails. He's now busy building another site in Rails and porting a Perl-based e-mail system to Go. Some of the AMU properties include GoComics.com (http://www.gocomics.com/), PuzzleSociety.com (http://puzzlesociety.com/), Doonesbury.com (http://doonesbury.slate.com/), and Dilbert.com (http://dilbert.com/).

He is also the Director of Technology for a small web development firm called New Age Graphics (www.newage-graphics.com). After creating a custom CMS using C# and ASP.NET, all his work has moved to WordPress since the time WordPress 3.0 was released, eliminating the need to ever run Windows again.

Doug is a passionate advocate for WordPress and has written several WordPress plugins, can be found on the WordPress forums answering questions (and writing sample code) under the username "scriptrunner", and occasionally plays the role of a grammar nerd as a volunteer in the WordPress Codex Documentation team.

His other experience includes PHP, JavaScript, jQuery, Erlang, Python, Magento, and Perl. Doug was also the co-author for a Perl book (Instant Perl Modules) and is a reviewer for other Packt Publishing books, including Mastering Android 3D Game Development and jQuery 2.0 Animation Beginner's Guide, as well as The Well Ground Rubyist, 2nd Edition for Manning Publications.

In his less than ample spare time, Doug enjoys spending time with his family. Other passions include photography, writing music, hitting drums and cymbals with sticks, playing briscola, meditation, and watching countless reruns of Firefly, Buffy the Vampire Slayer, and Doctor Who.

Many thanks to Packt Publishing for giving me the opportunity to review a book on my favorite technology, and a big thanks to the WordPress community for being the best I've ever come across.

www.PacktPub.com

Support files, eBooks, discount offers and more

You might want to visit www.PacktPub.com for support files and downloads related to your book.

Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <[email protected]> for more details.

At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.

http://PacktLib.PacktPub.com

Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can access, read and search across Packt's entire library of books.

Why Subscribe?

Fully searchable across every book published by PacktCopy and paste, print and bookmark contentOn demand and accessible via web browser

Free Access for Packt account holders

If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view nine entirely free books. Simply use your login credentials for immediate access.

Preface

Developing WordPress-powered websites is one of the standout trends in the modern web development world. The flexibility and power of the built-in features offered by WordPress has made developers turn their attention to the possibility of using it as a web development framework. This book will act as a comprehensive resource for building web applications with this amazing framework.

WordPress Web Application Development is a comprehensive guide focused on incorporating the existing features of WordPress into typical web development. This book is structured towards building a complete web application from scratch. With this book, you will build a portfolio management application with a modularized structure supported by the latest trending technologies.

This book provides a comprehensive, practical, and example-based approach for pushing the limits of WordPress to create web applications beyond your imagination.

It begins by exploring the role of existing WordPress components and discussing the reasons for choosing WordPress for web application development. As we proceed, more focus will be put into adapting WordPress features into web applications with the help of an informal use-case-based model for discussing the most prominent built-in features. While striving for web development with WordPress, you will also learn about the integration of popular client-side technologies such as Backbone.js, Underscore, jQuery, and server-side technologies and techniques such as template engines and OpenAuth integration.

This book differentiates from the norm by creating a website that is dedicated to providing tutorials, articles, and source codes to continue and enhance the web application development techniques discussed throughout this book. You can access the website for this book at http://www.innovativephp.com/wordpress-web-applications.

After reading this book, you will possess the ability to develop powerful web applications rapidly within limited time frames with the crucial advantage of benefitting low-budget and time-critical projects.

What this book covers

Chapter 1, WordPress As a Web Application Framework, walks you through the existing modules and techniques to identify their usage in web applications. Identification of WordPress features beyond the conventional CMS and planning portfolio management application are the highlights of this chapter.

Chapter 2, Implementing Membership Roles, Permissions, and Features, begins the implementation of a portfolio management application by exploring the features of the built-in user management module. Working with various user roles and permissions as well as an introduction to the MVC process through routing are the highlights of this chapter.

Chapter 3, Planning and Customizing the Core Database, serves as an extensive guide for understanding the core database structure and the role of database tables in web applications. Database querying techniques and coverage of the planning portfolio management application database are the highlights of this chapter.

Chapter 4, TheBuilding Blocks of Web Applications, explores the possibilities of extending WordPress posts beyond their conventional usage to suit complex applications. Advanced use of custom post types and an introduction to template engines are the highlights of this chapter.

Chapter 5, Developing Pluggable Modules, introduces the techniques of creating highly reusable and extensible plugins to enhance the flexibility of web applications. Implementing various plugins for explaining these techniques is the highlight of this chapter.

Chapter 6, Customizing the Dashboard for Powerful Backends, walks you through the process of customizing the WordPress admin panel for adding new features as well as changing existing features and design. Building reusable grids and designing an admin panel are the highlights of this chapter.

Chapter 7, Adjusting Themes for Amazing Frontends, dives into the techniques of designing amazing layouts, thereby opening them for future extension. Widgetizing layouts and building reusable templates are the highlights of this chapter.

Chapter 8, Enhancing the Power of Open Source Libraries and Plugins, explores the use of the latest trending open source technologies and libraries. Integrating open authentication in to your web application and structuring the application at the client side are the highlights of this chapter.

Chapter 9, Listening to Third-party Applications, demonstrates how to use WordPress XML-RPC API to create a custom API for your web application. Building a simple yet complete API with all the main features is the highlight of this chapter.

Chapter 10, Integrating and Finalizing The Portfolio Management Application, guides you through the integration of modules developed throughout this book into a standalone plugin while introducing you to important concepts such as caching, security, and testing.

Appendix, Configurations, Tools, and Resources, provides an application setup guide with necessary links to download the plugins and libraries used throughout the book.

What you need for this book

Technically, you need a computer, browser, and an Internet connection with the following working environment:

The Apache web serverPHP Version 5.2 or higherWordPress Version 3.6MySQL Version 5.0 or higher

Once you have the preceding environment, you can download the Responsive theme from http://wordpress.org/themes/responsive and activate it from the Themes section. Finally, you can activate the plugin developed for this book to get things started.

Please refer to Appendix, Configurations, Tools, and Resources, for the application setup guide, required software, and plugins.

Who this book is for

This book is intended for WordPress developers and designers who have the desire to go beyond conventional website development to develop quality web applications within a limited time frame and for maximum profit.

Experienced web developers who are looking for a framework for rapid application development will also find this to be a useful resource.

Prior knowledge of WordPress is preferable as the main focus will be on explaining methods for adapting WordPress techniques for web application development rather than explaining basic skills with WordPress.

Reader feedback

Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.

To send us general feedback, simply send an e-mail to <[email protected]>, and mention the book title via the subject of your message.

If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.

Customer support

Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.

Downloading the example code

You can download the example code files for all Packt books you have purchased from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.

Errata

Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the erratasubmissionform link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded on our website, or added to any list of existing errata, under the Errata section of that title. Any existing errata can be viewed by selecting your title from http://www.packtpub.com/support.

Piracy

Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.

Please contact us at <[email protected]> with a link to the suspected pirated material.

We appreciate your help in protecting our authors, and our ability to bring you valuable content.

Questions

You can contact us at <[email protected]> if you are having a problem with any aspect of the book, and we will do our best to address it.

Chapter 1. WordPress As a Web Application Framework

In recent years, WordPress has matured from being the most popular blogging tool to the most popular content management system. Thousands of developers around the world are making a living from WordPress design and development. As more and more people become interested in using WordPress, there are discussions and arguments for exploring the possibilities of using this amazing framework for web application development.

The future seems bright as WordPress has already got dozens of built-in modules, which can be easily adapted to web application development using some slight modifications. Since you are already reading this book, you are probably someone who is really excited to see how WordPress fits into web application development. Throughout this book, we are going to learn how we can inject the best practices of web development into the WordPress framework to build web applications in a rapid process.

Basically, this book will be important for developers from two different perspectives. On one hand, WordPress developers of beginner level to intermediate level can get the knowledge of cutting edge web development technologies and techniques to build complex applications. On the other hand, web development experts who are already familiar with popular PHP frameworks can learn WordPress for rapid application development. So let's get started!

In this chapter, we are going to cover the following topics:

WordPress as a CMSWordPress as a web development frameworkSimplifying development with built-in modulesIdentifying the components of WordPressA development plan for a portfolio management applicationUnderstanding limitations and sticking to guidelinesBuilding a question-answer interface

In order to work through this book, you should be familiar with WordPress themes, plugins, and its overall process. Developers who are experienced in PHP frameworks can work with this book while using the reference sources to learn WordPress. By the end of this chapter, you will have the ability to make the decision on choosing WordPress for web development.

WordPress as a CMS

Way back in 2003, WordPress released its first version as a simple blogging platform and continued to improve, until it became the most popular blogging tool. Afterwards, it continued to improve as aCMS (Content Management System) and has a reputation now for being the most popular CMS. These days everyone sees WordPress as a CMS rather than just a blogging tool.

Now, the question is where will it go next?

No one really knows the answer for this question. But recent versions of WordPress have included popular web development libraries such as Backbone.js and Underscore.js, and developers are even building different types of applications with WordPress. So we can assume that it's moving towards the direction of building applications. It's important to keep an eye on the next few versions to see what WordPress offers for web applications.

Before we consider the application development aspects of WordPress, it's a good idea to figure out the reasons for it being such a popular framework. The following are some of the reasons behind the success of WordPress as a CMS:

Plugin-based architecture for adding independent modules and the existence of over 20,000 open source pluginsSuper simple and easy-to-access administration interfaceFast learning curve and comprehensive documentation for beginnersRapid development process involving themes and pluginsActive development community with awesome supportFlexibility in building websites with its themes, plugins, widgets, and hooks

These reasons prove why WordPress is the top CMS for website development. But experienced developers who work with full stack web applications don't believe that WordPress has a future in web application development. While it's up for debate, let's see what WordPress has to offer for web development.

Once you complete reading this book, you will be able to decide whether WordPress has a future in web applications. I have been working with full stack frameworks for several years and I certainly believe in the future of WordPress for web development.

WordPress as a web development framework

In practice, the decision to choose a development framework depends on the complexity of your application. Developers will tend to go for frameworks in most scenarios. It's important to figure out why we go with frameworks for web development. Here is a list of possible reasons that frameworks become a priority in web application development:

They provide stable foundations for building custom functionalitiesStable frameworks usually have a large development community with active supportFrameworks contain built-in modules to address the common aspects of application development such as routing, language support, form validation, user management, and moreThey have a large number of utility functions to address repetitive tasks

Full stack development frameworks such as Zend, CodeIgniter, and CakePHP adhere to the points mentioned in the preceding section, which in turn become the framework of choice for most developers. Now let's take a look at how WordPress fits into the boots of the web application framework.

MVC versus event-driven architecture

A vast majority of web development frameworks are built to work with the MVC (Model-View-Controller) architecture, where the application is separated into independent layers called models, views, and controllers. In MVC, we have a clear understanding of what goes where and when each of the layers will be integrated in the process.

So, the first thing most developers will look at is the availability of MVC in WordPress. Unfortunately WordPress is not built on top of the MVC architecture. This is one of the main reasons that developers refuse to choose it as a development framework. Even though it is not MVC, we can create a custom execution process to make it work like an MVC application. Unlike other frameworks, it won't have the full capabilities of MVC. But unavailability of an MVC architecture doesn't mean that we cannot develop quality applications with WordPress.

WordPress relies on procedural event-driven architecture with its action hooks and filter system. Once the user makes a request, these actions will get executed in a certain order to provide the response to the user. You can find the complete execution procedure at http://codex.wordpress.org/Plugin_API/Action_Reference.

In an event-driven architecture, both the model and controller code gets scattered throughout the theme files. In the upcoming chapters, we are going to look at how we can separate these concerns with the event-driven architecture, in order to develop maintainable applications.

Simplifying development with built-in modules

As we discussed in the previous section, the quality of a framework depends on its core modules. The more quality you have in the core, the better it will be for developing quality and maintainable applications. It's surprising to see the availability of a number of WordPress modules directly related to web development, even though it was meant to create websites.

Let's get a brief introduction about the WordPress core modules to see how they fit into web application development:

User module: The built-in user management module is quite advanced, catering to the most common requirements of any web application. Its user roles and capability handling makes it much easier to control the access to specific areas of your application. Most full stack frameworks don't have a built-in user module and hence this can be considered as an advantage of using WordPress.File management: File uploading and managing is a common and time-consuming task in web applications. Media Uploader, which comes built-in with WordPress, can be effectively used to automate the file-related tasks without writing much source code. This super-simple interface makes it so easy for application users to handle file-related tasks.Template management: WordPress offers a simple template management system for its themes. It is not as complex or fully featured as a typical templating engine, but it does offer a wide range of capabilities from the CMS development perspective, which we can extend to suit web applications.Database management: In most scenarios, we will be using the existing database table structure for our application development. WordPress database management functionalities offer a quick and easy way of working with existing tables with their own style of functions. Unlike other frameworks, WordPress provides a built-in database structure and hence most of the functionalities can be used to directly work with these tables without writing custom SQL queries.Routing: Comprehensive support for routing is provided through plugins. WordPress makes it simple to change the existing routing and choose your own routing, in order to build search engine friendly URLs.XMR-RPC API: Building an API is essential for allowing third-party access to our application. WordPress provides a built-in API for accessing CMS-related functionality through its XML-RPC interface. Also developers are allowed to create custom API functions through plugins, making it highly flexible for complex applications.Caching: Caching in WordPress can be categorized into two sections; persistent and nonpersistent cache. Nonpersistent caching is provided by the WordPress cache object, while persistent caching is provided through its transient API. Caching techniques in WordPress is a simple comrade to other frameworks, but it's powerful enough to cater for complex web applications.Scheduling: As developers, you might have worked with cron jobs for executing certain tasks at specified intervals. WordPress offers the same scheduling functionality through built-in functions, similar to a cron job. Typically, it's used for scheduling future posts. But it can be extended to cater to complex scheduling functionality.Plugins and widgets: The power of WordPress comes with its plugin mechanism, which allows us to dynamically add or remove functionality without interrupting other parts of the application. Widgets can be considered as a part of the plugin architecture and will be discussed in detail in the remainder of this chapter.

An overall collection of modules and features provided by WordPress can be effectively used to match the core functionalities provided by full stack PHP frameworks.

Identifying the components of WordPress

WordPress comes up with a set of prebuilt components, which are intended to provide different features and functionality for an application. A flexible theme and powerful admin module act as the core of WordPress websites while plugins and widgets extend the core with application-specific features. As a CMS, we all have a pretty good understanding of how these components fit into a WordPress website.

Here our goal is to develop web applications with WordPress, and hence it is important to identify the functionality of these components in the perspective of web applications, so we are going to look at each of the following components, how they fit into web applications, and how we can take advantage of them to create flexible applications through a rapid development process:

The role of the WordPress themeThe role of the admin dashboardThe role of pluginsThe role of widgets

The role of the WordPress theme

Many of us are used to seeing WordPress as a CMS. In its default view, a theme is a collection of files used to skin your web application layouts. In web applications, it's recommended to separate different components into layers such as models, views, and controllers. WordPress doesn't adhere to the MVC architecture, but we can easily visualize the theme or templates as the presentation layer of WordPress.

In simple terms, views should contain the HTML needed to generate the layout and all the data it needs should be passed to the views. WordPress is built for creating content management systems and hence it doesn't focus on separating views from its business logic. Themes contain views, also known as template files, as a mix of both HTML code and PHP logic. As web application developers, we need to alter the behavior of existing themes, in order to limit the logic inside templates and use plugins to parse the necessary model data to the views.

The structure of a WordPress page layout

Typically, posts or pages created in WordPress consist of five common sections. Most of these components will be common across all the pages in the website. In web applications, we also separate the common layout content into separate views to be included inside other views. It's important for us to focus on how we can adapt the layout into a web-application-specific structure. Let's visualize the common layout of WordPress using the following diagram:

Having looked at the structure, it's obvious that the Header, Footer, and Main Content areas are mandatory even for web applications, but the footer and comments section will play a less important role in web applications, compared to web pages. The Sidebar is important in web applications, even though it won't be used with the same meaning. It can be quite useful as a dynamic widget area.

Customizing the application layout

Web applications can be categorized as projects and products. A project is something we develop that targets the specific requirements of a client. On the other hand, a product is an application created based on the common set of requirements for a wide range of users. Therefore, customizations will be required on layouts of your product based on different clients.

WordPress themes make it super simple to customize the layout and features using child themes. We can make the necessary modifications in the child theme while keeping the core layout in the parent theme. This will prevent any code duplications in customizing layouts. Also the ability to switch themes is a powerful feature that eases the layout customization process.

In situations where we need to provide dynamic layouts based on user types, devices, or browsers, we can dynamically switch between different themes by writing custom functions.

The role of the admin dashboard

The administration interface of an application plays one of the most important roles behind the scenes. WordPress offers one of the most powerful and easy-to-access admin areas compared to other competitive frameworks. Most of you should be familiar with using the admin area for CMS functionalities, but we will have to understand how each component in the admin area suits the development of web applications.

Admin dashboard

The dashboard is the location where all the users get redirected, once they are logged in to the admin area. Usually it contains dynamic widget areas with the most important data of your application. The dashboard could play a major role in web applications, compared to blogging or CMS functionality. We can remove the existing widgets related to CMS and add application-specific widgets to create a powerful dashboard.

Posts and pages

Posts in WordPress are built for creating content such as articles and tutorials. In web applications, posts will be the most important section to create different types of data. Often, we will choose custom post types instead of normal posts for building advanced data creation sections. On the other hand, pages are typically used to provide static content of the site. Usually we have static pages such as About Us, Contact Us, and Services.

Users

User management is a must-use section for any kind of web application. User roles, capabilities, and profiles will be managed in this section by authorized users.

Appearance

Themes and application configurations will be managed in this section. Widgets and theme options will be the important sections related to web applications.

Settings

This section involves general application settings. Most of the prebuilt items in this section are suited to blogs and websites. We can customize this section to add new configuration areas related to our plugins that are used in web application development.

There are some other sections such as links, pages, and comments, which will not be used frequently in complex web application development. The ability for adding new sections is one of the key reasons for its flexibility.

The role of plugins

In normal circumstances, WordPress developers use functions, which involve application logic scattered across theme files and plugins. Some developers even change the core files of WordPress, which is considered to be a very bad practice. In web applications, we need to be much more organized. In the section The role of the WordPress theme, we discussed the purpose of having a theme for web applications. Plugins will be and should be used to provide the main logic and content of your application. In short, anything you develop for web applications should go inside plugins, instead of theme files.

The plugin architecture is a powerful way to add or remove features without affecting the core. Also, we have the ability to separate independent modules into their own plugins, making it easier to maintain. On top of that, plugins have the ability to extend other plugins.

The role of widgets

The official documentation of WordPress refers to widgets as a component that adds content and features to your Sidebar. In typical blogging or from a CMS user's perspective, it's a completely valid statement. In fact, widgets offer more in web applications by going beyond content that populates Sidebars. The following screenshot shows a typical widgetized Sidebar of a website:

We can use dynamic widgetized areas to include complex components as widgets, making it easy to add or remove features without changing the source code. The following screenshot shows a sample dynamic widgetized area. We can use the same technique to develop applications with WordPress:

Throughout these sections, we covered the main components of WordPress and how they fit into the actual web application development. Now we have a good understanding of the components in order to plan the application that we will be developing throughout this book.

A development plan for a portfolio management application

Typically a WordPress book consists of several chapters, each of them containing different practical examples to suit each section. In this book, our main goal is to learn how we can build full stack web applications using built-in WordPress features, therefore, I thought of building a complete application, explaining each and every aspect of web development.

Throughout this book, we are going to develop an online portfolio management system for web development related professionals. This application can be considered as a mini version of a basic social network. We will be starting the development of this application from Chapter 2, Implementing Membership Roles, Permissions, and Features.

Planning is a crucial task in web development in which we will save a lot of time and avoid potential risks in the long run. First, we need to get a basic idea of the goal of this application, and its features, functionalities, and the structure of components to see how it fits into WordPress.

Application goals and a target audience

Developers and designers who work online as freelancers know the importance of a personal profile to show your skills for an improved reputation. But most people, including experts who work full time jobs, don't maintain such profiles and hence remain unnoticed among co-developers. The application developed throughout this book is intended to provide the opportunity for web professionals to create their public profiles and connect with the experts in the field.

This application is aimed at those who are involved in web development and design. I believe that both the output of this application and the contents of the book will be ideal for PHP developers who want to jump into WordPress application development.

Planning the application

Basically, our application consists of both frontend and backend, which is common to most web applications. In the frontend, both registered and unregistered users will have different functionalities based on their user roles. The following screenshot shows the structure of our application's home page:

The backend will be developed by customizing the built-in admin module of WordPress. The existing and new functionalities of the admin area will be customized based on the user role permissions.

User roles of the application

The application consists of four user roles, including the built-in admin role. The following are the user roles and their respective functionalities:

Admin: This manages the application's configurations, settings, and the capabilities of the users.Developer: This is the user role common to all web professionals who want to make profiles. All the developers will be able to create complete profile details to enhance their reputation.Members: These are normal users who want to use plugins, themes, books, articles, and applications created by developers and designers. They will be able to access and download the work made public by developers. Basically, the members will have more permission to directly interact with developers, compared to subscribers. We could also implement a premium content section in the future for paid members.Subscribers: This is also a normal user who wants to follow the activities of their preferred developers. These users will be notified whenever their preferred developers create a new activity within the application.

Note

Registration is required for all the four user roles in the Portfolio Management Application.

Planning application features and functions

Our main intention of building this application is to learn how WordPress can be adapted to advanced web application development. Therefore, we will be considering various small requirements, rather than covering all aspects of a similar system. Each of the functionalities will be focused on explaining various modules in web applications and the approach of WordPress in building similar functionality. Let's consider the following list of functions, which we will be developing throughout this book:

Developer profile management: Users who register as developers will be given the opportunity to construct their profiles by completing content divided into various sections such as services, portfolios, articles, and books.Frontend login and registration: Typically, web applications contain the login and registration in the frontend, whereas WordPress provides it in the admin area. Therefore, custom implementation of login and registration will be implemented in the application frontend.Settings panel: A comprehensive settings panel will be developed for administrators to configure general application settings from the backend.XML API: A large number of popular web applications come up with a fully functional API to allow access to third-party applications. In this application, we will be developing a simple API to access the developer details and activities from external sources.Notification service: A simple notification service will be developed to manage subscriptions as well as manage updates about the application activities.Responsive design: With the increase of Internet browsing using mobile devices, more and more applications are converting their apps to suit various devices. So we will be targeting different devices for fully responsive design from the beginning of the development processThird-party libraries: Throughout this book, we will be creating functionalities such as open auth login, RSS feed generation, and template management to understand the use of third-party libraries in WordPress.

While these are our main functionalities, we will also develop small features and components on top of them to explain the major aspects of web development.

If you are still not convinced, you can have a look at various types of WordPress-powered web applications at http://www.innovativephp.com/demo/packt/wordpress_applications.

Understanding limitations and sticking with guidelines

As with every framework, WordPress has its limitations in developing web applications. Developers need to understand the limitations before deciding to choose a framework for application development.

In this section, we are going to learn the limitations while building simple guidelines for choosing WordPress for web development. Let's get started:

Lack of support for MVC: We talked about the architecture of WordPress and its support for MVC in one of the earlier sections. As a developer, you need to figure out ways to work with WordPress in order to fit with your web applications. If you are someone who cannot work without MVC, WordPress may not be the best solution for your application.Database migration: If you are well experienced in web development, you will have a pretty good idea about the importance of choosing databases considering the possibilities of migrating to another one in later stages. This could be a limitation in WordPress as it's built-in to work with the MySql database. Using it with another database will be quite difficult, if not impossible. So if you need the database to be migrated to some other database, WordPress will not be the best solution.Performance: Performance of your application is something we get to experience in later stages of the project when we go into a live environment. It's important to plan ahead on the performance considerations as it can come through internal and external reasons. WordPress has a built-in database structure and we are going to use it in most of the projects. It's designed to suit CMS functionality and sticking with the same tables for different types of projects will not provide an optimized table structure. Therefore, performance might be a limitation for critical applications interacting with millions of records each day, unless you optimize your caching, indexing, and other database optimization strategies. WordPress runs on an event-driven architecture, packed with features. Often developers misuse the hooks without proper planning, affecting the performance of the application, so you have to be responsible in planning the database and necessary hooks in order to avoid performance overheads.Regular updates: WordPress has a very active community involving its development for new features and fixing the issues in the existing features. Once a new version of core is released, plugin developers will also update their plugins to be compatible with the latest version. Hence, you need to perform additional tasks for updating the core, themes, and plugins, which can be a limitation when you don't have a proper maintenance team.Object-oriented development: Experienced web developers will always look for object-oriented frameworks for development. WordPress started its coding with procedural architecture and is now moving rapidly towards object-oriented architecture, so there will be a mix of both procedural and object-oriented codes. WordPress also uses hook-based architecture for providing functionality for both procedural and object-oriented codes. Developers who are familiar with other PHP frameworks might find it difficult to come to terms with the mix of procedural and object-oriented code, as well as hook-based architecture, so you have to decide whether you are comfortable with its existing coding styles.

If you are a developer or designer, who thinks these limitations could cause major concerns for your projects, WordPress may not be the right solution for you.

Building a question-answer interface

Throughout the previous sections, we learned the basics of web application frameworks while looking at how WordPress fits into web development. By now, you should be able to visualize the potential of WordPress for application development and how it can change your career as developers. Being human, we always prefer a practical approach to learning new things over the more conventional theoretical approach.

So, I am going to complete this chapter by converting the default WordPress functionality into a simple question-answer interface such as Stack Overflow, to show you a glimpse into what we are going to develop throughout this book.

Prerequisites