wordpress code architecture
DESCRIPTION
WordPress Code Architecture - revising the code architecture of the WordPress CMS and comparing it to the design patterns and core decisions in other CMS and frameworks based on PHP, Python, Ruby, Java and C#.TRANSCRIPT
![Page 2: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/2.jpg)
Agenda
• Leading Factors
• Frontend
• Backend
• Users
• Database
• Helpers (Forms, etc)
• Others
![Page 3: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/3.jpg)
Mario Peshev
• WordPress Architect @ DevriX
• Former Java/PHP/Python Developer
• WordPress Ambassador
at SiteGround
• @no_fear_inc
• Open Source addict and Cofficer
![Page 4: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/4.jpg)
Personal opinion about different platforms out there
No flame wars intended
![Page 5: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/5.jpg)
![Page 6: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/6.jpg)
Leading Factors
• PHP – most widespread across hosting
vendors
• Inspiration from predecessor (b2/cafelog),
different from Rails and MVC-frameworks
• PHP 5.2.4 support in Core
• LAMP/LEMP stack
![Page 7: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/7.jpg)
Main Differences
• PHP is stateless and single-threaded
• Default stack: Apache + PHP + MySQL
• No MVC or complete OOP support
• Framework out of a CMS (and not vice
versa)
• No non-traditional data storage layers
• No REST support in core (until 4.0)
![Page 8: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/8.jpg)
PHP 5.2.4 support
Supporting 5.2.4 means that we can’t use:
• namespaces
• traits
• Class::{expr}()
• Late Static Binding
• Closures (Anonymous functions)
• Dynamic access to static methods
![Page 9: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/9.jpg)
Frontend
![Page 10: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/10.jpg)
![Page 11: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/11.jpg)
Layouts and Views • Some MVC frameworks such as CakePHP:
![Page 12: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/12.jpg)
Razor View (ASP.NET)
![Page 13: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/13.jpg)
AJAX
Similar to ng-model/ng-bind in AngularJS
![Page 14: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/14.jpg)
Backend
![Page 15: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/15.jpg)
WordPress Backend
• Flexible default admin panel
• Complete views and listings for post types
• User management and capability control
• Settings, Media manager and much more
• Reusable WP_List_Table Components
![Page 16: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/16.jpg)
Alternative Admins
Different Admin approaches for every
popular CMS
• Scaffolded admin panels from web
frameworks
• Admin components and user management
extensions
Extensibility vs. Complexity Dilemma
![Page 17: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/17.jpg)
Data APIs
• Wrappers and facade across post types
• Unification in options –
add_option, set_theme_mod,set_transient
• Automatically serializing complex objects
• Verifying for new records
• Sanitizing data
![Page 18: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/18.jpg)
Drupal Entity API You define your data types with most MVC frameworks. Drupal has the Entity API:
![Page 19: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/19.jpg)
Environment
![Page 20: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/20.jpg)
Default Infrastructure
• These are not available as separate modules/components.
![Page 21: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/21.jpg)
Hooks and DI
• Actions and Filters in WordPress
• Annotations and Attributes in other languages and platforms
Streamlined vs. Layer-based application life cycle model
![Page 22: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/22.jpg)
JSF Annotations
![Page 23: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/23.jpg)
PHP has some, too!
Doctrine:
![Page 24: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/24.jpg)
Database
![Page 25: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/25.jpg)
Database
• Post Type API base
• *_Query helper classes
• wpdb class
• Other helper CRUD functions
![Page 26: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/26.jpg)
Challenges with Databases • Normalization vs. Denormalization
• Data Decoupling
• Data storage choices:
![Page 27: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/27.jpg)
LINQ or even NoSQL
![Page 28: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/28.jpg)
Helpers and Utilities
![Page 29: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/29.jpg)
Forms
• Token generation
• Model-based validaiton
• Unified access control
![Page 30: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/30.jpg)
Hopes for the Settings API
![Page 31: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/31.jpg)
Media Uploader and /uploads • Media uploader – wp-content/uploads for
private documents
![Page 32: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/32.jpg)
![Page 33: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/33.jpg)
Other Areas
• User Management
• Multisite support
• Tools and Libraries
• Routing
• Performance
• Security
• Packages and [Distributions]
![Page 34: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/34.jpg)
Summary
• WordPress is still AWESOME
• There are just other ways to build an architecture
• Other languages and platforms have their own strong sides too
![Page 35: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/35.jpg)
Questions?
Tweets as @no_fear_inc
Mario Peshev on LinkedIn
nofearinc on WordPress.org
GitHubering via mpeshev
DevWP.eu - blog
![Page 36: WordPress Code Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051012/540bebb08d7f726a208b47ad/html5/thumbnails/36.jpg)
Notes
• Take a look at ExoWP
• Definitely watch To OOP or not to OOP