• 15 hours
  • Easy

Free online content available in this course.

Paperback available in this course

Certificate of achievement available at the end this course

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 3/13/18

Premiers pas dans le code

Log in or subscribe for free to enjoy all this course has to offer!

Avant de nous attaquer au développement sous WordPress, je propose une entrée en matière générale afin de prendre nos premières marques avec la documentation, ainsi que la structure de WordPress et de ses concepts. Une fois que nous aurons dégrossi le sujet, vous serez prêts à plonger au cœur de votre site !

Utiliser la documentation

Si vous avez déjà développé des sites web en utilisant un CMS ou un framework, vous avez probablement déjà eu besoin de rechercher des informations dans la documentation dédiée. Dans le cas contraire, sachez que c'est une mine d'informations pour les développeurs qui décrit l'ensemble des fonctionnalités fournies par l'application pour vous permettre de les exploiter.

Sur WordPress, la documentation s'appelle le codex et regroupe tout ce qu'il faut savoir sur la création de thèmes, de plugins ou encore de widgets. Elle décrit aussi le fonctionnement interne de WordPress, n'hésitez donc pas à la parcourir si vous souhaitez approfondir vos connaissances ou simplement détailler un point précis.

La structure de WordPress

Système de fichiers

La plupart des fichiers situés directement à la racine de WordPress sont soit des points d’entrée de l’application (c’est-à-dire appelés directement par le client lors d’une requête vers le site) tels que index.php, wp-login.php ou wp-signup.php, soit des fichiers permettant l’initialisation de l’application, comme wp-config.php ou wp-settings.php.

Vous avez ensuite trois dossiers qui regroupent le cœur de WordPress :

  • wp-includes regroupe toute la logique de WordPress, pour toutes les fonctionnalités natives (hors administration).

  • wp-admin permet de regrouper les pages et fonctionnalités de l’interface d’administration.

  • wp-content contient les plugins et les thèmes installés dans votre application (respectivement dans les sous-dossiers « Plugins » et « Themes »), c’est dans ce dossier que nous développerons de nouvelles fonctionnalités.

J'insiste lourdement sur le fait que tout le code que vous écrivez devra se trouver dans un plugin ou bien dans un thème, et nulle part ailleurs ! Vous ne devez jamais modifier les fichiers natifs de WordPress pour des raisons de propreté du code : tout ce qui est spécifique à votre site doit être cloisonné pour être facilement réutilisable. De plus, lorsque WordPress est mis à jour, tous les fichiers extérieurs aux plugins et aux thèmes sont susceptibles d'être modifiés. Vos éventuelles modifications seraient donc perdues !

Rien ne vous empêche en revanche d'ouvrir les fichiers de WordPress, par exemple pour chercher ce que fait exactement une fonction que vous utilisez. Il est ainsi très commun d'avoir à regarder le contenu du dossier wp-includes lorsque l'on commence à rajouter des fonctionnalités personnalisées.

La base de données

Maintenant que vous avez fait connaissance avec les fichiers de WordPress, nous allons jeter un coup d’œil à ce qui se cache dans la base de données. N’ayez pas peur, c’est vraiment très léger !

WordPress ne contient que 11 tables par défaut, c’est-à-dire si vous ne faites pas de modification particulière. Bien entendu, des plugins peuvent créer de nouvelles tables si les fonctionnalités qu’ils rajoutent le nécessitent.

  • wp_commentmeta et wp_comments permettent la sauvegarde des commentaires sur les publications du site.

  • wp_links était utilisée dans les anciennes versions de WordPress et est toujours présente pour des raisons de compatibilité.

  • wp_options contient les valeurs des paramètres de configuration du site, comme le slogan, qui peuvent être éditables dans l’interface d’administration.

  • wp_postmeta et wp_posts stockent le contenu des publications du site, que ce soit des articles ou des pages, mais aussi les menus. Il faut noter qu’il existe un système de version des pages et des articles et que les différentes versions sauvegardées sont représentées chacune par une ligne dans la table wp_posts.

  • wp_term_relationships, wp_term_taxonomy et wp_terms contiennent les informations relatives aux catégories, aux tags, ainsi que leur lien avec les différents articles et pages du site.

  • wp_usermeta et wp_users maintiennent les données utilisateurs, que ce soit leur nom ou bien les droits accordés à chacun.

Le principe des actions

Théorie

Dans WordPress, tout ou presque a été prévu dans le but de pouvoir être adaptable par des développeurs tiers voulant personnaliser l'application. Pour cela, il faut que celle-ci fournisse un moyen de rajouter du code spécifique sans pour autant que le développeur ait besoin de modifier les fichiers natifs de WordPress. De cette façon, le code rajouté peut être partagé sur un autre site en ajoutant simplement de nouveaux fichiers et sans modifier les existants. Pour offrir cette possibilité, le concept des actions a été introduit.

Une action est une fonction qui est appelée lorsqu'un événement particulier se produit, par exemple la sauvegarde d'un article par un contributeur. L'idée générale est que, dans notre exemple, la fonction qui gère la sauvegarde de l'article va déclencher un événement intitulé save_post, qu'un certain nombre de fonctions peuvent observer, pour s'exécuter à cet instant.

Le nombre de fonctions observant un événement n'est pas limité, c'est là tout l'intérêt de ce principe. Si vous avez besoin de faire un traitement spécifique lorsqu'un article est sauvegardé, il vous suffit de créer la fonction effectuant ce traitement et de la brancher sur l'événement save_post, et WordPress s'occupera de faire l'appel au moment opportun.

Les fonctions utilisées

Concrètement, l'enregistrement d'une action se fait à l'aide de la fonction add_action(), qui prend en paramètre le nom de l'événement déclencheur et le nom de la fonction à appeler.

Un troisième argument peut-être ajouté à cet appel, c'est la priorité. Étant donné que les actions peuvent être multiples sur un événement donné, vous pourriez avoir besoin de déterminer si votre action sera exécutée avant ou après une autre. C'est l'utilité de la priorité : les actions ayant la priorité de plus faible niveau seront exécutées en premier, la valeur par défaut étant 10.

Ainsi, si vous voulez exécuter un fonction nommée ma_fonction() après les autres actions observant l'événement save_post, vous pouvez faire l'appel qui suit.

<?php
add_action('save_post', 'ma_fonction', 20);

L'appel aux actions connectées à un événement donné se fait lorsque la fonction do_action() est exécutée, celle-ci prenant en argument le nom de l'événement et les éventuels arguments à passer aux actions exécutées.

L'appel à l'événement save_post, situé dans le fichier wp-includes/post.php, suit bien entendu ce format :

<?php
do_action('save_post', $post->ID, $post);

WordPress et la programmation orientée objet

Retour en arrière

Comme il a été dit en introduction, la première version de WordPress est sortie au cours de l'année 2003. De son côté, PHP5, qui inclut un support avancé des concepts objets dans le langage, est sorti en 2004, soit peu de temps après.

Par conséquent, le développement de WordPress s'est à l'origine purement organisé sur du code procédural, c'est-à-dire sans notions de programmation orientée objet. Au fil des versions, de nouveaux composants on été ajoutés à WordPress, et ceux-ci ont été construits dans une mesure de plus en plus importante autour des objets.

Cependant, afin de maintenir la plus grande compatibilité possible pour les plugins et les thèmes existants, créés par la communauté, mais aussi pour ne pas avoir a réécrire complétement le CMS, une grande partie du code est restée sous forme procédurale au fil des ans. Il est donc très courant d'utiliser des fonctions de l'espace global, tout en ayant parfois affaire à des objets pour les fonctionnalités les plus récentes de WordPress. Ne soyez donc pas étonné d'avoir à manier ces deux aspects au cours de vos développements, c'est tout à fait normal d'après la conception du moteur.

Et votre code dans tout ça ?

En ce qui concerne le code que vous écrirez, il n'y a pas de norme particulière à suivre : de nombreux plugins sont encore écrits sans avoir une structure objet, d'autres au contraire y sont très attachés. Dans la suite de ce cours, les exemples seront le plus souvent orientés objet, mais il reste toujours certains cas particuliers (notamment les thèmes) pour lesquels la structure de WordPress n'est pas adaptée. Nous devrons donc aussi, suivant les cas, concilier les deux.

Gardez toutefois à l'esprit que le choix reste le vôtre et qu'aucune obligation n'existe. Si la programmation objet devient de plus en plus utilisée sur les applications PHP, le fonctionnement du CMS n'est pas toujours le choix le plus évident.

  • Le codex renferme toutes les informations techniques sur WordPress.

  • Il existe onze tables permettant de stocker l'ensemble des informations spécifiques à votre site.

  • Les actions permettent d'exécuter des fonctions lors du déclenchement d'événements spécifiques.

  • WordPress contient du code procédural et orienté objet dans son coeur, il vous appartient de choisir comment vous souhaitez organiser votre propre code.

Example of certificate of achievement
Example of certificate of achievement