This document discusses issues with WordPress and recommends alternatives. It summarizes that WordPress has problems like spaghetti code, poor plugin and template systems, and lack of modern development practices like dependency injection. It recommends using alternative tools that are more flexible, powerful, and interoperable like Composer, Symfony components, and Drupal 8. The conclusion encourages not being afraid to code and provides information on PHP conferences.
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
WordPress is not a CMS and should not be used for websites
1. WordPress is not a
Content Management System
Do not use it for your websites!
thomas@gasc.fr @methylbro
Tuesday 6th
of May 2014 @LaCantine_Tlse, Toulouse
2. involved
edition=2013
spoke
edition=2012
Who I am ?
name=Thomas G.
type=person
spoke
edition=11/12/2012
name=Human Talks
type=event
name=PHP Tour
type=event
name=Paris Web
type=event
name=Sud Web
type=event
attendee
edition=2012, 2013
name=Forum PHP
type=event
member
volunteer=2012, 2013
office=2014
name=AFUP
type=organization
attendee
edition=2013, 2014
attendee
edition=2012, 2013
attendee
edition=2014
organized
14
organized
3
2
2
2
inspired
inspired
http://methylbro.fr/
3. WordPress is web software you can use to
create a beautiful website or blog
wordpress.org
10. wp-includes/plugin.php
<?php
// how WordPress plugin works
function plugin_footer()
{
echo ‘hello world !’;
}
add_action( ‘wp_footer’ , ‘plugin_footer );
do_action( ‘wp_footer’ );
<?php
// how plugins should works
class Footer extends SPLSubject { /*...*/ }
class FooterPlugin extends SPLObserver
{
function update()
{
echo ‘hello world !’;
}
}
$wp_footer = new Footer();
$wp_footer->attach( new FooterPlugin() );
$wp_footer->notify();
http://codex.wordpress.org/Plugin_API
12. wp-includes/class-wp.php
http://develop.svn.wordpress.org/branches/3.9/src/wp-includes/class-wp.php
<?php
class WP {
// ...
function main( $query_args = '' ) {
$this->init();
$this->parse_request($query_args);
$this->send_headers();
$this->query_posts();
$this->handle_404();
$this->register_globals();
do_action_ref_array(
'wp', array( &$this )
);
}
}
// ...
require '/template-loader.php' ;
1. initiate
build WP_User instance into $current_user global
2. parse request
retrieves params into self::$query_vars
3. send http headers
send headers and terminate if needed
4. retrieves infos from database
parse and execute $wp_query and then retrieves
posts
5. handle 404
changes the http headers already sent if a not
found error occurred during the request
6. register lot of globals
retrieves posts data and set them into globals
vars
7. send signal to plugins
say to the plugins that they can do things here
8. render php script as template
execute a php script as a template and directly
output the result
14. wp-includes/class-wp.php
<?php
class WP
{
// ...
function query_posts()
{
global $wp_the_query;
$this->build_query_string();
$wp_the_query->query(
$this->query_vars
);
}
}
not even passed as
parameter !! WTF ?!
http://develop.svn.wordpress.org/branches/3.9/src/wp-includes/class-wp.php
16. It’s all about interoperability
PHP Framework Interoperability Group
http://www.php-fig.org/
17. All these things are in Drupal 8
Drupal 8
http://symfony.com/blog/symfony2-meets-drupal-8
- EventDispatcher
- HTTPKernel
- DependencyInjection
and more ...
22. Thank you, Any questions?
Illustrations :
http://thenounproject.com/
www.afup.org
French Association of PHP Users
Join
www.phptour.org
Lyon, France
June, 23rd
& 24th
2014