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
450
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
A Day of REST 2016
rmccue
5
840
WordCamp Europe 2015
rmccue
1
360
WordCamp Brisbane 2015
rmccue
3
1.2k
WCNYC2014
rmccue
5
510
WCMKE2014
rmccue
5
3.4k
Introduction to Git + Using Git with WordPress
rmccue
8
1.9k
Other Decks in Programming
See All in Programming
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
370
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
550
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
410
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
6k
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
960
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
150
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
950
AWS re:Invent 2024個人的まとめ
satoshi256kbyte
0
100
Оптимизируем производительность блока Казначейство
lamodatech
0
960
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Embracing the Ebb and Flow
colly
84
4.5k
A Tale of Four Properties
chriscoyier
157
23k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
19
2.3k
Designing for humans not robots
tammielis
250
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Building Flexible Design Systems
yeseniaperezcruz
328
38k
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