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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryan McCue
February 07, 2017
Programming
480
4
Share
Next Generation WordPress
Explore what we need to push into the next generation of the WordPress project.
Ryan McCue
February 07, 2017
More Decks by Ryan McCue
See All by Ryan McCue
What’s Fair is FAIR: A Decentralised Future for WordPress Distribution
rmccue
0
670
A Day of REST 2016
rmccue
5
930
WordCamp Europe 2015
rmccue
1
470
WordCamp Brisbane 2015
rmccue
3
1.3k
WCNYC2014
rmccue
5
590
WCMKE2014
rmccue
5
3.6k
Introduction to Git + Using Git with WordPress
rmccue
8
2k
Other Decks in Programming
See All in Programming
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
170
CDK Deployのための ”反響定位”
watany
5
800
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
14k
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
150
Road to RubyKaigi: Play Hard(ware)
makicamel
1
380
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
570
Agentic Elixir
whatyouhide
0
380
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
1k
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
210
GitHubCopilotCLIをはじめよう.pdf
htkym
0
210
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
800
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
3k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
220
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
720
So, you think you're a good person
axbom
PRO
2
2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
160
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
380
Information Architects: The Missing Link in Design Systems
soysaucechin
0
890
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Design in an AI World
tapps
1
200
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
[SF Ruby Conf 2025] Rails X
palkan
2
970
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