Slide 1

Slide 1 text

WordPress is an Application Framework Monday, 24 September 12

Slide 2

Slide 2 text

Tom Willmot humanmade • happytables • wpremote tomwillmot.com hmn.md wpremote.com happytables.com @tomwillmot @humanmadeltd @wpremote @happytables github.com/humanmade Monday, 24 September 12

Slide 3

Slide 3 text

WordPress is not just for blogging. Monday, 24 September 12

Slide 4

Slide 4 text

WordPress is a CMS. Monday, 24 September 12

Slide 5

Slide 5 text

WordPress is not just a CMS. Monday, 24 September 12

Slide 6

Slide 6 text

WordPress is an Application Framework. Monday, 24 September 12

Slide 7

Slide 7 text

Monday, 24 September 12

Slide 8

Slide 8 text

• What is an Application Framework • What makes WordPress an Application Framework • How we built the WP Remote web app on WordPress. What is an Application Framework Monday, 24 September 12

Slide 9

Slide 9 text

What is an Application Framework Monday, 24 September 12

Slide 10

Slide 10 text

A web application framework is a software framework that is designed to support the development of dynamic websites, Web applications and Web services. The framework aims to alleviate the overhead associated with common activities performed in Web development. For example, many frameworks provide libraries for database access, templating frameworks and session management, and often promote code reuse. http://en.wikipedia.org/wiki/Web_application_framework Monday, 24 September 12

Slide 11

Slide 11 text

That sounds a lot like WordPress! Monday, 24 September 12

Slide 12

Slide 12 text

A web application framework is a software framework that is designed to support the development of dynamic websites, Web applications and Web services. The framework aims to alleviate the overhead associated with common activities performed in Web development. For example, many frameworks provide libraries for database access, templating frameworks and session management, and often promote code reuse. http://en.wikipedia.org/wiki/Web_application_framework Monday, 24 September 12

Slide 13

Slide 13 text

A web application framework is a software framework that is designed to support the development of dynamic websites, Web applications and Web services. The framework aims to alleviate the overhead associated with common activities performed in Web development. For example, many frameworks provide libraries for database access, templating frameworks and session management, and often promote code reuse. http://en.wikipedia.org/wiki/Web_application_framework Monday, 24 September 12

Slide 14

Slide 14 text

WordPress is web software you can use to create a beautiful website or blog. Monday, 24 September 12

Slide 15

Slide 15 text

WordPress is an Application Framework that happens to come with a default app called “Blog”. Monday, 24 September 12

Slide 16

Slide 16 text

WordPress is web software you can use to create a beautiful app, website or blog. Monday, 24 September 12

Slide 17

Slide 17 text

Application Frameworks are libraries of useful API’s & Classes Monday, 24 September 12

Slide 18

Slide 18 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Core API’s Monday, 24 September 12

Slide 19

Slide 19 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 20

Slide 20 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 21

Slide 21 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 22

Slide 22 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 23

Slide 23 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 24

Slide 24 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 25

Slide 25 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 26

Slide 26 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 27

Slide 27 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 28

Slide 28 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 29

Slide 29 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 30

Slide 30 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 31

Slide 31 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 32

Slide 32 text

• HTTP • XMLRPC • WP_User • WP_Rewrite • WPDB • WP_Cache & Transients • WP_Scripts • WP_Filesystem • admin-ajax.php • I18N • WP_Query • Security • Templating system • An Administration interface Monday, 24 September 12

Slide 33

Slide 33 text

What did I miss? Monday, 24 September 12

Slide 34

Slide 34 text

The thing that makes WordPress uniquely powerful? Monday, 24 September 12

Slide 35

Slide 35 text

Monday, 24 September 12

Slide 36

Slide 36 text

add_filter(); Monday, 24 September 12

Slide 37

Slide 37 text

3rd Party API’s • TLC Transients • WP Thumb • Custom Meta Box API • WordPress Objects Monday, 24 September 12

Slide 38

Slide 38 text

• TLC Transients https://github.com/markjaquith/WP-TLC- Transients • WP Thumb • Custom Meta Box API • WordPress Objects • Term Meta Monday, 24 September 12

Slide 39

Slide 39 text

• TLC Transients • WP Thumb https://github.com/humanmade/WPThumb • Custom Meta Box API • WordPress Objects • Term Meta Monday, 24 September 12

Slide 40

Slide 40 text

• TLC Transients • WP Thumb • Custom Meta Box API https://github.com/humanmade/Customs • WordPress Objects • Term Meta Monday, 24 September 12

Slide 41

Slide 41 text

• TLC Transients • WP Thumb • Custom Meta Box API • WordPress Objects https://github.com/humanmade/WordPress- Objects • Term Meta Monday, 24 September 12

Slide 42

Slide 42 text

• TLC Transients • WP Thumb • Custom Meta Box API • WordPress Objects • Term Meta https://gist.github.com/2953813 Monday, 24 September 12

Slide 43

Slide 43 text

All these API’s can be used without the “Blog” part of WordPress Monday, 24 September 12

Slide 44

Slide 44 text

Still need convincing? Monday, 24 September 12

Slide 45

Slide 45 text

Still need convincing? • Continuously improved. Monday, 24 September 12

Slide 46

Slide 46 text

Still need convincing? • Continuously improved. • Great backwards compatibility support. Monday, 24 September 12

Slide 47

Slide 47 text

Still need convincing? • Continuously improved. • Great backwards compatibility support. • Super easy to jump in and get started. Monday, 24 September 12

Slide 48

Slide 48 text

Still need convincing? • Continuously improved. • Great backwards compatibility support. • Super easy to jump in and get started. • Can run on literally any server. Monday, 24 September 12

Slide 49

Slide 49 text

Still need convincing? • Continuously improved. • Great backwards compatibility support. • Super easy to jump in and get started. • Can run on literally any server. • Widely tested, runs 16.7% of the web, some of the largest sites in the world. Monday, 24 September 12

Slide 50

Slide 50 text

Why Not • Some of the core API’s are old and nasty. • It doesn’t enforce a strict MVC structure. https://github.com/markjaquith/WordPress-Skeleton/ • People might think your not a real software engineer if your not using Ruby to build your web app. Monday, 24 September 12

Slide 51

Slide 51 text

WordPress powered Apps! Monday, 24 September 12

Slide 52

Slide 52 text

WP Remote Quick Demo Monday, 24 September 12

Slide 53

Slide 53 text

WordPress Back-end WordPress Plugin Client Site Knockout.js Front-end JSON JSON Monday, 24 September 12

Slide 54

Slide 54 text

• Users • Sites • Site Meta • Core, Plugin and Theme updates • Groups • History • Backups • Settings Monday, 24 September 12

Slide 55

Slide 55 text

• Standard WordPress subscriber level users. • Custom Login, Registration and Lost Password pages and Change Password pages. Users Monday, 24 September 12

Slide 56

Slide 56 text

• Sites are stored as a custom post_type. • Each site has the post_author set to the user that owns the site. • The site status is set to private to signify that users sites are private to them. • Meta information about the site like home_url, admin_url etc. are stored in post_meta. As are lists of backups, history items and plugins and themes that need updating. Sites Monday, 24 September 12

Slide 57

Slide 57 text

• Site Group is a custom taxonomy • Each group is a new term in that taxonomy • Doesn’t matter if 2 users unknowingly use the same group as each user only sees sites that they own. • We use a custom term_meta table to store things like whether a group is collapsed or not. Site Groups Monday, 24 September 12

Slide 58

Slide 58 text

• Installed on each of the users sites • We use the HTTP API to communicate between the back-end and Plugin. • The Plugin hooks into the Core, Plugin & Theme update API’s to do the actual updates. Plugin Monday, 24 September 12

Slide 59

Slide 59 text

• AMC Story Sync http://www.amctv.com/shows/breaking-bad/ story-sync • Bendy Words http://bendywords.com/demo-board/ • StudioPress http://www.woothemes.com/2011/07/ supportpress/ Others Monday, 24 September 12

Slide 60

Slide 60 text

Done! Monday, 24 September 12

Slide 61

Slide 61 text

Thanks For Listening Monday, 24 September 12

Slide 62

Slide 62 text

Ask Questions Now Or later on twitter @tomwillmot Monday, 24 September 12