pourquoi wordpress n’est pas un cms
DESCRIPTION
TRANSCRIPT
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
involvededition=2013
spokeedition=2012
Who I am ?
name=Thomas G.type=person
spokeedition=11/12/2012
name=Human Talkstype=event
name=PHP Tourtype=event
name=Paris Webtype=event
name=Sud Webtype=event
attendeeedition=2012, 2013
name=Forum PHPtype=event
membervolunteer=2012, 2013office=2014
name=AFUPtype=organization
attendeeedition=2013, 2014
attendeeedition=2012, 2013
attendeeedition=2014
organized
14
organized
3
2
2
2
inspired inspired
http://methylbro.fr/
WordPress is web software you can use to create a beautiful website or blog
wordpress.org
WordPress is shit!
5 horribles things in WordPress
about themes, metadata, plugins, core, ...
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
Spaghetti Codehttp://en.wikipedia.org/wiki/Spaghetti_code
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
Video
Content Managing System
<Content> Article
Song
Video Clip
Lyrics
http://en.wikipedia.org/wiki/Content_management_system
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
SPLObserver Interface
: SPLSubject : SPLObserver
notify()
attach()
update()
http://www.php.net/manual/en/class.splobserver.php
wp-includes/class-wp.phphttp://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. initiatebuild WP_User instance into $current_user global
2. parse requestretrieves params into self::$query_vars
3. send http headerssend headers and terminate if needed
4. retrieves infos from databaseparse and execute $wp_query and then retrieves posts
5. handle 404changes the http headers already sent if a not found error occurred during the request
6. register lot of globalsretrieves posts data and set them into globals vars
7. send signal to pluginssay to the plugins that they can do things here
8. render php script as templateexecute a php script as a template and directly output the result
HTTPKernel
Request requestresolve
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
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
Dependency Injectionhttp://php-di.org/doc/understanding-di.html
It’s all about interoperability
PHP Framework Interoperability Group
http://www.php-fig.org/
All these things are in Drupal 8
Drupal 8
http://symfony.com/blog/symfony2-meets-drupal-8
- EventDispatcher- HTTPKernel- DependencyInjection
and more ...
Use cool tools
terminal
cool toolsand even more
More powerful than WordPress templates
Template Engine
CSS Framework
∞templatesImage
Editor
infinity
More powerful than WordPress plugins
PackagistComposer
30 000+packages
http://getcomposer.org/doc/00-intro.md
Conclusion: Don’t be afraid (to code) !
Thank you, Any questions?
Illustrations :http://thenounproject.com/
www.afup.orgFrench Association of PHP Users
Join
www.phptour.orgLyon, France
June, 23rd & 24th 2014