Créer une table dans WordPress

Lorsque l’on crée un plugin pour WordPress, on peut avoir besoin de stocker des informations et de simples options dans la table wp_options, même sous forme de tableau sérialisés ne suffisent plus.

Logo WordPress, une table et une base de données MySQL sur fond d'un village dans le Vall de Boí dans la province de Lleida en Espagne

Création de la table

WordPress dispose d’un objet global $wpdb qui dispose de méthodes et de propriétés pour agir sur la base de données. Chaque table de la base de données est préfixée par une chaîne donnée par la propriété $wpdb->prefix. La collation utilisée est donnée par la méthode $wpdb->get_charset_collate().

Je veux créer une table pour stocker le contenu des fichiers joints pdf afin de les inclure dans des requêtes de recherche. J’ai donc besoin de :

  • ID du post : bigint,
  • post_parent : bigint,
  • post_name : varchar(200),
  • post_date : datetime,
  • post_author : bigint,
  • post_title: text,
  • post_mime_type: varchar(20), si je décide d’y mettre autre chose tel que les docx, pptx, …
  • post_content : longtext.

La requête sql de création de la table est :

Dans WordPress, on utilise la fonction dbDelta() définie dans le fichier wp-admin/includes/upgrade.php, plutôt que de soumettre directement la requête sql de création. La fonction dbDelta() examine la structure de table actuelle si elle existe, la compare à la structure de table souhaitée et ajoute ou modifie la table si nécessaire, elle est donc très pratique pour les mises à jour. Néanmoins, il y a certains points à respecter :

  • On doit mettre chaque champ sur une ligne,
  • Il doit y avoir 2 espaces entre PRIMARY KEY et la définition de cette clé,
  • On doit utiliser le mot clé KEY au lieu de son synonyme INDEX et l’on doit inclure au moins une clé KEY,
  • On ne doit pas utiliser d’apostrophes quotes ou d’accents graves backticks autour les noms des champs (colonnes),
  • Les mots clés sql doivent être en majuscules,
  • Chaque champ doit comporter une longueur pour ceux qui en acceptent (INT, VARCHAR),
  • Les types des champs doivent être en minuscules.

On écrit donc les instructions à insérer dans une fonction :

Si la table n’existe pas, la fonction dbDelta() renvoie un tableau avec une clé dont le nom est le nom de la table table_name et la valeur la chaîne Created table table_name. Si la table existe déjà, et si aucun champ ne change, la fonction renvoie un tableau vide. Si le type d’un champ change, le tableau contiendra les champs dont le type a changé avec la chaîne Changed type of table_name.field from old_type to new_type. Si on ajoute un champ , chaque champ ajouté avec la chaîne Added column table_name.field. Si l’on met moins de champ et que l’on relance la fonction, les anciens champs restent, et le retour est un tableau vide. Pour supprimer un champ, on utilise une requête mysql ATER TABLE.

Suppression du plugin et de la table

La table devra être effacée si l’extension est supprimée par l’utilisateur. On peut écrire un fichier uninstall.php qui sera appelé lorsque le plugin est supprimé. Cet article résume la procédure à effectuer. Il faudra écrire une requête DROP TABLE que l’on appellera avec l’objet $wpdb et la méthode query.

Et hop, on peut créer des tables pour stocker les informations nécessaires à une extension.

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.