SlideShare une entreprise Scribd logo
1  sur  22
Meetup #3
Bien organiser son code dans
WordPress : un peu d’objet beaucoup
d’effets
Constat
• En 4 ou 5 années d’utilisation de WordPress et
une centaine de réalisations, nous avons
rarement procédé de la même manière pour
aborder un projet.
Pourquoi #1
• WordPress évolue vite. Il faut donc intégrer
dans la mesure du possible les nouvelles
possibilités :
– Apparition des menus.
– Apparition des custom post types.
– Emergence de plugin « professionnels » (Yoast,
WooCommerce, MailPoet, etc..)
Pourquoi #2
• WordPress laisse beaucoup de libertés aux
développeurs :
– Codex plutôt complet mais pas de vrais « CookBook ».
– Documentation« atomisée ». Difficile d’avoir une
vision d’ensemble.
– Trop souvent on trouve dans Google un « snippet » de
10 lignes que l’on colle dans functions.php .
C’est à la fois la force et la faiblesse de WordPress.
3 inconvénients majeurs
1. C’est dur à relire.
2. C’est dur à “versionner”.
3. C’est dur à ré-utiliser.
« Je bosse sur les CTP's, mais toi plutôt dans le
bas du fichier pour tes enqueues sinon on va
conflicter » Thomas D.
« Merde. C’est quoi ce projet déjà où on avait
une super Google Map ? » Virginie G.
Conséquences
LE CAS DES CUSTOM POST TYPES
Essayons de faire mieux
Rappel
• Apparus avec WordPress 3.0
• Evolution majeure pour les développeurs et
les webmasters
• WordPress devient un vrai CMS et plus
seulement un « un truc pour faire des blogs »
• Les clients adorent
Quand les utiliser ?
• Lorsque vous manipulez un contenu qui n’est
ni une vraiment page, ni vraiment un article.
Généralement, c’est le cas lorsque les fichiers
single.php et/ou page.php ne conviennent pas
pour leur affichage.
– Gérer les boutiques d’une enseigne
– Gérer des témoignages clients
– Gérer un portfolio
Comment les ajouter à son projet?
Sous la forme de plugins dédiés
– Le Post Type crée pourra « survivre » à un
changement de Thème.
– Le Post Type que je m’apprête à ajouter pourra me
servir sur d’autres projets. (d’autant plus si
l’ensemble du code est isolé au sein d’un dossier
unique.)
Un plugin pour faire quoi ?
• Cela dépend de mon projet évidemment, ici
on va simplement gérer les participants de
notre meetup.
• Le besoin est assez simple :
– Ajout / édition / suppression en back-office.
– Lecture en front (Single + Archive) avec templates,
css et requêtes spécifiques.
Traduction du besoin en WordPress
• init (pour l’enregistrement du CTP),
• pre_get_posts (pour adapter notre requête),
• wp_enqueue_scripts (pour une CSS
spécifique),
• template_include (pour gérer nos templates
directement depuis le plugin)
=> 4 fonctions sur 3 actions et 1 filtre
En objet c’est encore mieux
• Cela permet de disposer de propriétés.
– protected $_post_type = 'participants';
– protected $_posts_per_page = -1;
• Cela permet d’éliminer le function_exists et le
risque de collision.
=> Plus facile à lire et à comprendre donc facile
à modifier/réutiliser
Mission accomplie
100% du code nécessaire à notre
fonctionnalité se situe dans le plugin.

Contenu connexe

Tendances

JCertif 2013 - Vers un web moderne pour l'Afrique ?
JCertif 2013 - Vers un web moderne pour l'Afrique ?JCertif 2013 - Vers un web moderne pour l'Afrique ?
JCertif 2013 - Vers un web moderne pour l'Afrique ?Rossi Oddet
 
Un site web en 5 minutes avec le CMS Wordpress- SFD Douala 2014
Un site web en 5 minutes avec le CMS Wordpress-  SFD Douala 2014Un site web en 5 minutes avec le CMS Wordpress-  SFD Douala 2014
Un site web en 5 minutes avec le CMS Wordpress- SFD Douala 2014Mak YIMEN
 
agoraCMS - WordPress, thèmes et plugins : mode d'emploi
agoraCMS - WordPress, thèmes et plugins : mode d'emploiagoraCMS - WordPress, thèmes et plugins : mode d'emploi
agoraCMS - WordPress, thèmes et plugins : mode d'emploiLionel Pointet
 
Bien qu'en ligne votre site web n'est probablement pas en production
Bien qu'en ligne votre site web n'est probablement pas en productionBien qu'en ligne votre site web n'est probablement pas en production
Bien qu'en ligne votre site web n'est probablement pas en productionMarc Boivin
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsBoiteaweb
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMSAurélien Denis
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiquesSylvie Clément
 
Créer, Pousser et Lancer un serveur RESTful en 10 min.
Créer, Pousser et Lancer un serveur RESTful en 10 min.Créer, Pousser et Lancer un serveur RESTful en 10 min.
Créer, Pousser et Lancer un serveur RESTful en 10 min.Anthony Faucogney
 
Combien coûte un site WordPress ? - Wordcamp Paris 2014
Combien coûte un site WordPress ? - Wordcamp Paris 2014Combien coûte un site WordPress ? - Wordcamp Paris 2014
Combien coûte un site WordPress ? - Wordcamp Paris 2014Thierry Pigot
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015gaelmetais
 
Démarrer son site WordPress : LA "to-do" list
Démarrer son site WordPress : LA "to-do" listDémarrer son site WordPress : LA "to-do" list
Démarrer son site WordPress : LA "to-do" listKaylynne Johnson
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoosejeromegn
 

Tendances (20)

JCertif 2013 - Vers un web moderne pour l'Afrique ?
JCertif 2013 - Vers un web moderne pour l'Afrique ?JCertif 2013 - Vers un web moderne pour l'Afrique ?
JCertif 2013 - Vers un web moderne pour l'Afrique ?
 
Un site web en 5 minutes avec le CMS Wordpress- SFD Douala 2014
Un site web en 5 minutes avec le CMS Wordpress-  SFD Douala 2014Un site web en 5 minutes avec le CMS Wordpress-  SFD Douala 2014
Un site web en 5 minutes avec le CMS Wordpress- SFD Douala 2014
 
Jquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter BootstrapJquery Mobile vs Twitter Bootstrap
Jquery Mobile vs Twitter Bootstrap
 
Bootstrap 4
Bootstrap 4Bootstrap 4
Bootstrap 4
 
agoraCMS - WordPress, thèmes et plugins : mode d'emploi
agoraCMS - WordPress, thèmes et plugins : mode d'emploiagoraCMS - WordPress, thèmes et plugins : mode d'emploi
agoraCMS - WordPress, thèmes et plugins : mode d'emploi
 
Bien qu'en ligne votre site web n'est probablement pas en production
Bien qu'en ligne votre site web n'est probablement pas en productionBien qu'en ligne votre site web n'est probablement pas en production
Bien qu'en ligne votre site web n'est probablement pas en production
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des plugins
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 
CakePHP formation
CakePHP formationCakePHP formation
CakePHP formation
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMS
 
Node.js
Node.jsNode.js
Node.js
 
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015  dev-pragmatique-bonnes-pratiquesWordcamp paris 2015  dev-pragmatique-bonnes-pratiques
Wordcamp paris 2015 dev-pragmatique-bonnes-pratiques
 
Créer, Pousser et Lancer un serveur RESTful en 10 min.
Créer, Pousser et Lancer un serveur RESTful en 10 min.Créer, Pousser et Lancer un serveur RESTful en 10 min.
Créer, Pousser et Lancer un serveur RESTful en 10 min.
 
jQuery mobile vs Twitter bootstrap
jQuery mobile vs Twitter bootstrapjQuery mobile vs Twitter bootstrap
jQuery mobile vs Twitter bootstrap
 
Combien coûte un site WordPress ? - Wordcamp Paris 2014
Combien coûte un site WordPress ? - Wordcamp Paris 2014Combien coûte un site WordPress ? - Wordcamp Paris 2014
Combien coûte un site WordPress ? - Wordcamp Paris 2014
 
YLT paris js - mars 2015
YLT paris js - mars 2015YLT paris js - mars 2015
YLT paris js - mars 2015
 
Démarrer son site WordPress : LA "to-do" list
Démarrer son site WordPress : LA "to-do" listDémarrer son site WordPress : LA "to-do" list
Démarrer son site WordPress : LA "to-do" list
 
Node.js et MongoDB: Mongoose
Node.js et MongoDB: MongooseNode.js et MongoDB: Mongoose
Node.js et MongoDB: Mongoose
 
Livre Blanc Web temps réel - Node JS
Livre Blanc Web temps réel - Node JSLivre Blanc Web temps réel - Node JS
Livre Blanc Web temps réel - Node JS
 

En vedette

Criminología profesor Geovanny Vicente Romero
Criminología profesor Geovanny Vicente RomeroCriminología profesor Geovanny Vicente Romero
Criminología profesor Geovanny Vicente RomeroGeovanny Vicente Romero
 
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCION
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCIONECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCION
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCIONU2014139880
 
Université : pour une nouvelle ambition
Université : pour une nouvelle ambition Université : pour une nouvelle ambition
Université : pour une nouvelle ambition Hortense Billot
 
redes sociales
redes socialesredes sociales
redes socialesDavid_Guti
 
Pacte tunisien : le Pacte des Compétences Tunisiennes Engagées
Pacte tunisien : le Pacte des Compétences Tunisiennes EngagéesPacte tunisien : le Pacte des Compétences Tunisiennes Engagées
Pacte tunisien : le Pacte des Compétences Tunisiennes EngagéesTNwebdays
 
Linea influencia (2)
Linea influencia (2)Linea influencia (2)
Linea influencia (2)Erick Delgado
 
Les animaux irina polanco
Les animaux   irina polancoLes animaux   irina polanco
Les animaux irina polancotairon83
 
Aspa run pour madagascar 2013-fr3
Aspa run pour madagascar 2013-fr3Aspa run pour madagascar 2013-fr3
Aspa run pour madagascar 2013-fr3Entre Nous
 
Mon autobiographie[1]
Mon autobiographie[1]Mon autobiographie[1]
Mon autobiographie[1]Will Poyser
 
Lecture partagée 2 - A. Witko
Lecture partagée 2 - A. WitkoLecture partagée 2 - A. Witko
Lecture partagée 2 - A. Witkoauroreape
 
Presentación Faja Alta & Faja Plus
Presentación Faja Alta & Faja PlusPresentación Faja Alta & Faja Plus
Presentación Faja Alta & Faja PlusArdyss Colombia
 
Presentación Faja Postparto
Presentación Faja PostpartoPresentación Faja Postparto
Presentación Faja PostpartoArdyss Colombia
 
Communiqué episode pollution_air_27 février 2013
Communiqué episode pollution_air_27 février 2013Communiqué episode pollution_air_27 février 2013
Communiqué episode pollution_air_27 février 2013Entre Nous
 
Madagascar Community Development Society -Presentation
Madagascar Community Development Society -PresentationMadagascar Community Development Society -Presentation
Madagascar Community Development Society -Presentationmadagascarcds
 

En vedette (20)

Mode
ModeMode
Mode
 
Criminología profesor Geovanny Vicente Romero
Criminología profesor Geovanny Vicente RomeroCriminología profesor Geovanny Vicente Romero
Criminología profesor Geovanny Vicente Romero
 
Top Secret
Top SecretTop Secret
Top Secret
 
801 xd'
801 xd'801 xd'
801 xd'
 
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCION
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCIONECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCION
ECONOMÍA REGIONAL DE LOS COSTES DE TRANSANCCION
 
Mensaje social 2
Mensaje social 2Mensaje social 2
Mensaje social 2
 
Université : pour une nouvelle ambition
Université : pour une nouvelle ambition Université : pour une nouvelle ambition
Université : pour une nouvelle ambition
 
redes sociales
redes socialesredes sociales
redes sociales
 
Pacte tunisien : le Pacte des Compétences Tunisiennes Engagées
Pacte tunisien : le Pacte des Compétences Tunisiennes EngagéesPacte tunisien : le Pacte des Compétences Tunisiennes Engagées
Pacte tunisien : le Pacte des Compétences Tunisiennes Engagées
 
Linea influencia (2)
Linea influencia (2)Linea influencia (2)
Linea influencia (2)
 
Stolearm
StolearmStolearm
Stolearm
 
Les animaux irina polanco
Les animaux   irina polancoLes animaux   irina polanco
Les animaux irina polanco
 
Aspa run pour madagascar 2013-fr3
Aspa run pour madagascar 2013-fr3Aspa run pour madagascar 2013-fr3
Aspa run pour madagascar 2013-fr3
 
Mon autobiographie[1]
Mon autobiographie[1]Mon autobiographie[1]
Mon autobiographie[1]
 
Lecture partagée 2 - A. Witko
Lecture partagée 2 - A. WitkoLecture partagée 2 - A. Witko
Lecture partagée 2 - A. Witko
 
Presentación Faja Alta & Faja Plus
Presentación Faja Alta & Faja PlusPresentación Faja Alta & Faja Plus
Presentación Faja Alta & Faja Plus
 
Presentación Faja Postparto
Presentación Faja PostpartoPresentación Faja Postparto
Presentación Faja Postparto
 
Presentación Lumbomen
Presentación LumbomenPresentación Lumbomen
Presentación Lumbomen
 
Communiqué episode pollution_air_27 février 2013
Communiqué episode pollution_air_27 février 2013Communiqué episode pollution_air_27 février 2013
Communiqué episode pollution_air_27 février 2013
 
Madagascar Community Development Society -Presentation
Madagascar Community Development Society -PresentationMadagascar Community Development Society -Presentation
Madagascar Community Development Society -Presentation
 

Similaire à Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.

Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPUn site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPatelier111
 
Libérez le potentiel de WordPress
Libérez le potentiel de WordPressLibérez le potentiel de WordPress
Libérez le potentiel de WordPressDaniel Roch - SeoMix
 
Comment mettre à jour automatiquement vos tables des matières Word ?
Comment mettre à jour automatiquement vos tables des matières Word ?Comment mettre à jour automatiquement vos tables des matières Word ?
Comment mettre à jour automatiquement vos tables des matières Word ?Votre Assistante
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupMichael Bertocchi
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressDaniel Roch - SeoMix
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet DrupalAdyax
 
Comment choisir son cms
Comment choisir son cmsComment choisir son cms
Comment choisir son cmsStrasWeb
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetDevclic
 
Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015webassoc .fr
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
Guide wordpress pour_collections_numeriques
Guide wordpress pour_collections_numeriquesGuide wordpress pour_collections_numeriques
Guide wordpress pour_collections_numeriquesJean-Michel Mermet
 
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...Olivier Nourry
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilespprem
 
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsPrésentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsSymetris
 
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?Smile I.T is open
 
Apprendre php
Apprendre phpApprendre php
Apprendre phpben zanre
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)LaNetscouade
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
Le meilleur pour votre site WordPress
Le meilleur pour votre site WordPressLe meilleur pour votre site WordPress
Le meilleur pour votre site WordPressAurélien Denis
 

Similaire à Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress. (20)

Un site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XPUn site de collectivité sur WordPress ? Méthodes et retours d'XP
Un site de collectivité sur WordPress ? Méthodes et retours d'XP
 
Libérez le potentiel de WordPress
Libérez le potentiel de WordPressLibérez le potentiel de WordPress
Libérez le potentiel de WordPress
 
Comment mettre à jour automatiquement vos tables des matières Word ?
Comment mettre à jour automatiquement vos tables des matières Word ?Comment mettre à jour automatiquement vos tables des matières Word ?
Comment mettre à jour automatiquement vos tables des matières Word ?
 
Presentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afupPresentation mkframework software craftsmanship a l'afup
Presentation mkframework software craftsmanship a l'afup
 
Optimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPressOptimiser réellement le référencement naturel de WordPress
Optimiser réellement le référencement naturel de WordPress
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet Drupal
 
Etude des Frameworks PHP
Etude des Frameworks PHPEtude des Frameworks PHP
Etude des Frameworks PHP
 
Comment choisir son cms
Comment choisir son cmsComment choisir son cms
Comment choisir son cms
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internet
 
Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015Atelier pratique : CR CMS - Webassoc 14 avril 2015
Atelier pratique : CR CMS - Webassoc 14 avril 2015
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
Guide wordpress pour_collections_numeriques
Guide wordpress pour_collections_numeriquesGuide wordpress pour_collections_numeriques
Guide wordpress pour_collections_numeriques
 
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...
L'accessibilité à grande échelle - Comment WordPress intègre l’accessibilité ...
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobiles
 
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détailsPrésentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
Présentation Symetris - Drupalcamp Montreal 2013 le diable est dans les détails
 
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
CMSday 2013 - Usines à sites : Quelles sont les approches possibles ?
 
Apprendre php
Apprendre phpApprendre php
Apprendre php
 
Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)Mener à bien un projet Drupal (Drupagora 2013)
Mener à bien un projet Drupal (Drupagora 2013)
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Le meilleur pour votre site WordPress
Le meilleur pour votre site WordPressLe meilleur pour votre site WordPress
Le meilleur pour votre site WordPress
 

Meetup WordPress Lyon #3 : Bien organiser son code dans WordPress.

  • 1. Meetup #3 Bien organiser son code dans WordPress : un peu d’objet beaucoup d’effets
  • 2. Constat • En 4 ou 5 années d’utilisation de WordPress et une centaine de réalisations, nous avons rarement procédé de la même manière pour aborder un projet.
  • 3. Pourquoi #1 • WordPress évolue vite. Il faut donc intégrer dans la mesure du possible les nouvelles possibilités : – Apparition des menus. – Apparition des custom post types. – Emergence de plugin « professionnels » (Yoast, WooCommerce, MailPoet, etc..)
  • 4. Pourquoi #2 • WordPress laisse beaucoup de libertés aux développeurs : – Codex plutôt complet mais pas de vrais « CookBook ». – Documentation« atomisée ». Difficile d’avoir une vision d’ensemble. – Trop souvent on trouve dans Google un « snippet » de 10 lignes que l’on colle dans functions.php . C’est à la fois la force et la faiblesse de WordPress.
  • 5. 3 inconvénients majeurs 1. C’est dur à relire. 2. C’est dur à “versionner”. 3. C’est dur à ré-utiliser.
  • 6. « Je bosse sur les CTP's, mais toi plutôt dans le bas du fichier pour tes enqueues sinon on va conflicter » Thomas D. « Merde. C’est quoi ce projet déjà où on avait une super Google Map ? » Virginie G. Conséquences
  • 7. LE CAS DES CUSTOM POST TYPES Essayons de faire mieux
  • 8. Rappel • Apparus avec WordPress 3.0 • Evolution majeure pour les développeurs et les webmasters • WordPress devient un vrai CMS et plus seulement un « un truc pour faire des blogs » • Les clients adorent
  • 9. Quand les utiliser ? • Lorsque vous manipulez un contenu qui n’est ni une vraiment page, ni vraiment un article. Généralement, c’est le cas lorsque les fichiers single.php et/ou page.php ne conviennent pas pour leur affichage. – Gérer les boutiques d’une enseigne – Gérer des témoignages clients – Gérer un portfolio
  • 10. Comment les ajouter à son projet? Sous la forme de plugins dédiés – Le Post Type crée pourra « survivre » à un changement de Thème. – Le Post Type que je m’apprête à ajouter pourra me servir sur d’autres projets. (d’autant plus si l’ensemble du code est isolé au sein d’un dossier unique.)
  • 11. Un plugin pour faire quoi ? • Cela dépend de mon projet évidemment, ici on va simplement gérer les participants de notre meetup. • Le besoin est assez simple : – Ajout / édition / suppression en back-office. – Lecture en front (Single + Archive) avec templates, css et requêtes spécifiques.
  • 12. Traduction du besoin en WordPress • init (pour l’enregistrement du CTP), • pre_get_posts (pour adapter notre requête), • wp_enqueue_scripts (pour une CSS spécifique), • template_include (pour gérer nos templates directement depuis le plugin) => 4 fonctions sur 3 actions et 1 filtre
  • 13. En objet c’est encore mieux • Cela permet de disposer de propriétés. – protected $_post_type = 'participants'; – protected $_posts_per_page = -1; • Cela permet d’éliminer le function_exists et le risque de collision. => Plus facile à lire et à comprendre donc facile à modifier/réutiliser
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22. Mission accomplie 100% du code nécessaire à notre fonctionnalité se situe dans le plugin.

Notes de l'éditeur

  1. Gestion du fil d’ariane.
  2. Créer un plugin c’est facile.
  3. Déclaration de nos propriétés. Et à la construction de la classe, enregistrement de notre fonction d’installation et déclenchement de 4 hooks sur plugins_loaded
  4. Gestion du post type. Gestion de la requête. Gestion de la vue.
  5. Afin de cibler correctement pre_get_posts et wp_enqueue_scripts on s’aidera d’un petit « helper » pour le contexte :
  6. Enregistrement du CPT. Recours au propriété de notre classe.
  7. Ajustement de requête. C’est aussi pour cela que l’on utilise les custom post type. Leur affichage est différent des articles et pages. Notez l’utilisation des propriétés de la classes et notre petit helper. En utilisant la fonction pre_get_posts, je comprends facilement ce que je fais.
  8. Ajout d’une feuille de style dédié. J’utilise notre helper pour cibler proprement. C’est important de ne charger que le nécessaire dans WordPress ! On aurait la même approche si besoin d’un fichier javascript
  9. Gestion des templates. Je renvoie un fichier spécifique si présent. C’est donc optionnel.
  10. Sublime