Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress is not a Content Management System

WordPress is not a Content Management System

Do not use it for your websites!

Thomas Gasc

May 06, 2014
Tweet

More Decks by Thomas Gasc

Other Decks in Programming

Transcript

  1. WordPress is not a Content Management System Do not use

    it for your websites! [email protected] @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
  4. wp-content/themes/ <?php // WordPress template while($latest_cat_post->have_posts()) : $latest_cat_post->the_post(); the_title(); the_excerpt();

    endwhile; <?php // as it should be foreach ($lastest_posts as $post) { echo $post->title; echo $post->excerpt; } http://codex.wordpress.org/Global_Variables
  5. wp-includes/meta.php /* post's enhancement with metadata */ function add_metadata( string

    $meta_type, int $object_id, string $meta_key, mixed $meta_value, bool $unique = false ); function get_metadata( string $meta_type, int $object_id, string $meta_key = ‘’, bool $single = false ); <?php // define a connexion between 2 posts $post_id = 14; $next_post_id = 17; add_metadata( ‘post’, $post_id, ‘next_post’, $next_post_id ); // what’s happen if … ? wp_delete_post( $next_post_id ); http://codex.wordpress.org/Function_Reference/the_meta
  6. Video Content Managing System <Content> Article Song Video Clip Lyrics

    http://en.wikipedia.org/wiki/Content_management_system
  7. 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
  8. 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
  9. HTTPKernel Request request resolve controller controller resolve arguments view response

    Response terminate exception Sub-Request Call Controller exception “sub-response” content response? http://symfony.com/doc/current/components/http_kernel/introduction.html
  10. 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
  11. All these things are in Drupal 8 Drupal 8 http://symfony.com/blog/symfony2-meets-drupal-8

    - EventDispatcher - HTTPKernel - DependencyInjection and more ...
  12. 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