Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Next Generation WordPress
Search
Ryan McCue
February 07, 2017
Programming
4
470
Next Generation WordPress
Explore what we need to push into the next generation of the WordPress project.
Ryan McCue
February 07, 2017
Tweet
Share
More Decks by Ryan McCue
See All by Ryan McCue
What’s Fair is FAIR: A Decentralised Future for WordPress Distribution
rmccue
0
510
A Day of REST 2016
rmccue
5
920
WordCamp Europe 2015
rmccue
1
450
WordCamp Brisbane 2015
rmccue
3
1.3k
WCNYC2014
rmccue
5
580
WCMKE2014
rmccue
5
3.6k
Introduction to Git + Using Git with WordPress
rmccue
8
2k
Other Decks in Programming
See All in Programming
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
190
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.9k
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
120
CSC307 Lecture 04
javiergs
PRO
0
650
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
280
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Fluid Templating in TYPO3 14
s2b
0
120
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.7k
高速開発のためのコード整理術
sutetotanuki
1
360
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.2k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
410
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.1k
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
270
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
190
Evolving SEO for Evolving Search Engines
ryanjones
0
110
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
280
Tell your own story through comics
letsgokoyo
1
800
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
76
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
440
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
100k
Context Engineering - Making Every Token Count
addyosmani
9
640
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Transcript
Next Generation WordPress Ryan McCue Director of Engineering at Human
Made
Next Generation Previous Current
None
2003 1.x
2003 1.x 2005 2.x
2003 1.x 2005 2.x 2010 3.x
2003 1.x 2005 2.x 2010 3.x 2014 4.x
Blogging CMS Platform 2003 1.x 2005 2.x 2010 3.x 2014
4.x
4.7 + 4.8
4.x
Platform?
Platform = Next Generation
1. Philosophy 2. Process 3. Projects Next Generation
Philosophy
Backwards compatibility Design for the majority Decisions, not options
The user comes first
The user comes first
User Experience
Developer User Experience
DUX
Developers Are Users Too Philosophy:
WordPress Sucks Spoiler:
None
None
Why?
WordPress End-users
WordPress End-users Developers
“What got us here, won’t get us there” — Matt
Mullenweg, State of the Word 2016
All About Me
Process
How WordPress Works
Incremental development = Organic growth
“A rolling codebase gathers technical debt” — Ancient Australian proverb
Posts ➡ Pages ➡ CPTs
for end users for developers
Grand Design ≠ better
~ 2 years pass ~
Design For Developers Process:
Rebuilding the Plane While Flying It
WordPress WordPress
Blog CMS Platform WordPress Architecture
Platform Blog CMS Next Generation
1. Write wrappers 2. Test both old and new 3.
Flip the wrapper
Retains Backwards Compatibility Write, Test, Flip
Projects
Set a Standard Projects:
wp_insert_post
wp_insert_post (Why?)
1. Write wp_insert_post WP_Post::create $wpdb->insert( "INSERT INTO $wpdb->posts" ) wp_set_post_categories()
wp_set_post_tags() wp_slash()
2. Test wp_insert_post WP_Post::create $wpdb->insert( "INSERT INTO $wpdb->posts" ) exercise
left to reader wp_set_post_categories() wp_set_post_tags() wp_slash()
3. Flip WP_Post::create $wpdb->insert( "INSERT INTO $wpdb->posts" ) wp_set_post_categories() wp_set_post_tags()
wp_slash() wp_insert_post
3. Flip WP_Post::create $wpdb->insert( "INSERT INTO $wpdb->posts" ) wp_set_post_categories() wp_set_post_tags()
wp_slash() wp_insert_post
WP_Post::create
WP_Post::create WP_Page Woo_Product WP_Revision Jetpack_Comic
Rewrites
<?php add_rewrite_rule( 'archives/date/([0-9]{4})/([0-9]{1,2})/?$', 'index.php?year=$matches[1]&monthnum=$matches[2]' );
Routers $app = new \Slim\App; $app->get('/hello/{name}', function (Request $request, Response
$response) { Slim Framework Route::get('user/{id}', function ($id) { Laravel Symfony class BlogController extends Controller { /** * @Route("/blog", name="blog_list") */ public function listAction() {
'index.php?rest_route=/$matches[1]' ); add_action( 'init', function () { global $wp; $wp->add_query_var(
'rest_route' ); }); add_action( 'parse_request', function () { global $wp; if ( empty( $wp->query_vars['rest_route'] ) ) { return; } // Finally, do something. }); add_rewrite_rule( '^wp-json/(.*)?',
function () { // Much easier. } ); add_rewrite_rule( '^wp-json/(.*)?',
'index.php?year=$matches[1]&monthnum=$matches[2]' ); add_rewrite_rule( 'archives/date/([0-9]{4})/([0-9]{1,2})/?$',
function ( $matches ) { global $wp_query; $args = [
'year' => $matches[1], 'monthnum' => $matches[2], ]; $wp_query = new WP_Query( $matches ); } ); add_rewrite_rule( 'archives/date/([0-9]{4})/([0-9]{1,2})/?$',
add_rewrite_rule( 'login/?$', function () { get_header(); wp_login_form(); get_footer(); } );
1. Write wrappers 2. Test both old and new 3.
Flip the wrapper
Bonus: No More Flushing
Autoloading
Drupal ✓ Joomla ✓ MediaWiki ✓ Magento ✓ WordPress ✗
Autoloading?
Autoloading is a trade-off
15 MB 15,000,000 bytes
Autoloading Load Everything
Composer?
Plugin Dependencies
<?php /** * Plugin Name: Amazing Plugin * Requires: other-plugin,
rest-api */ add_plugin_dependencies( __FILE__, [ 'other-plugin', 'rest-api' ] );
Conflicts? Plugin Dependencies
Already a Problem Plugin Dependencies
Even bigger?
Split WordPress
None
None
None
None
What is WordPress?
Do Not Break WordPress
Next Generation
1. Philosophy 2. Process 3. Projects Next Generation
Developers Are Users Too Philosophy:
Design For Developers Process:
Set the Standard Projects:
Thanks. rmccue.io speakerdeck.com/rmccue core.trac.wordpress.org/ticket/31245 Frank the DUX Duck from Twemoji
State of the Word photo: Brian Richards for Post Status hmn.md