Dans la plupart des cas, les plugins modifient les options, les métadonnées ou utilisent des tables existantes (le plus souvent la table Posts) pour créer de nouvelles fonctions.

Types de publication personnalisés, taxonomies personnalisées, manipulation d’images, galeries, codes courts – aucun de ces types n’a généralement besoin de sa propre table de base de données.

En effet, le schéma de base de données WordPress (comment la base de données est organisée) se prête bien au développement. Les objets peuvent être stockés dans la table posts, et des informations supplémentaires sur ces objets peuvent être stockées dans la table postmeta. Cependant, dans certaines situations, cela devient fastidieux et / ou gaspilleur.

Dans l’article d’aujourd’hui, nous allons examiner les avantages et les inconvénients des nouvelles tables de base de données, comment déterminer leur structure et comment les créer dans WordPress.

Considérations sur les tableaux personnalisés?

L’utilisation ou non d’une table personnalisée pour votre plugin dépend de deux facteurs: la structure et la quantité de vos données. Je dirais que vous n’avez besoin d’un tableau personnalisé que si votre structure de données est fondamentalement différente du modèle postal standard et Vous en avez de grandes quantités.

Pour étayer mon propos, nous devrions envisager un plugin qui utilise Google Analytics pour créer et stocker des rapports hebdomadaires constitués d’une série de points de données. Vous pouvez aborder cela de trois manières:

Une table personnalisée

Nous pourrions créer une simple feuille de calcul personnalisée qui stockerait l’analyse de chaque semaine sur une ligne. Une ligne de la base de données contiendrait un identifiant, la date de l’analyse, le nombre de publications lues, les liens cliqués, le pays avec le plus de visiteurs, etc.

Post et Postmeta

Nous pourrions créer un type de publication « Analytics » personnalisé et l’utiliser pour enregistrer l’ID et la date de l’analyse. Nous pourrions ensuite utiliser post meta pour enregistrer chaque point de données.

Un tableau simple

Au lieu d’utiliser des articles ou un tableau personnalisé, nous pouvons simplement utiliser une seule option dans le tableau des options. Ce serait un tableau dont les membres seraient les numéros hebdomadaires individuels.

Puisque nous recueillons des données sur une base hebdomadaire, ce n’est vraiment pas un énorme ensemble de données. Bien sûr, il serait pratique d’avoir une table qui répond exactement à nos besoins, mais comme nous ne le faisons pas, cela vaut-il la peine de polluer notre belle base de données WordPress avec une table qui n’est utilisée qu’une fois par semaine? Je dirais non, surtout parce que nos données vont bien avec l’approche de valeur clé des tables postmeta.

Choisir entre la table des posts et le tableau simple n’est pas si simple. Si notre exemple ne stocke que des données historiques valant un an, un tableau peut être une approche parfaitement valide. Pour commencer, il comptera 52 membres faciles à manipuler.

Avec la collecte de données continue, je considérerais l’approche Post et Postmeta simplement parce que nous ne voulons pas charger et modifier un tableau de 260 membres après la cinquième année.

« Dans le monde réel, les lignes sont parfois floues. Il n’est pas si facile de décider du chemin à emprunter. »

Maintenant, changeons simplement un paramètre de l’exemple et voyons si quelque chose change. Collectons des données chaque minute au lieu de chaque semaine. Une année compte 525 948 minutes, ce qui signifie que l’utilisation d’un tableau simple accumulerait plus d’un demi-million de membres à la fin de la première année. Ce n’est clairement pas une utilisation efficace de notre base de données car il faudrait une éternité pour calculer quelque chose.

La solution Post et Postmeta se heurterait au même problème. Bien que WordPress soit bien optimisé, votre site Web peut caler à des chiffres de cette ampleur si vous faites la moindre erreur d’optimisation, sans parler du fait que la recherche d’utilisateurs peut souffrir de problèmes de vitesse sur votre blog (car les articles et toutes les analyses se produiraient) dans le même tableau enregistré). Notez que votre méta-table de publication contiendra probablement plus de 10 points de données pour chaque analyse, de sorte que votre méta-table obtiendrait 5 259 480 lignes par an.

Il s’agit d’une situation dans laquelle une table personnalisée peut être appropriée. Ce tableau contiendrait également un demi-million de lignes par an, mais il serait distinct de votre autre contenu. Étant donné que les points de données peuvent être ajoutés sous forme de colonnes (ou à l’aide d’une méta-table dédiée), vous pouvez effectuer des opérations beaucoup plus rapidement.

Dans le monde réel, les lignes sont parfois floues. Il n’est pas si facile de décider de la voie à suivre. Pour vous aider, voici quelques avantages et inconvénients précis de la création de tableaux personnalisés:

Les professionnels

  • Vous pouvez créer des schémas qui correspondent exactement à votre structure de données
  • Vous n’avez pas besoin d’utiliser deux tables de base de données pour stocker des données
  • Vous contrôlez les types de champs et les valeurs limites
  • Vos données sont bien séparées des autres aspects de WordPress
  • Dans certains cas, l’exportation de données peut être plus facile
  • Votre application peut être mieux mise à l’échelle
  • Sinon, les requêtes complexes peuvent être simplifiées
  • Vos données peuvent être beaucoup plus claires

Les désavantages

  • Vous surchargez peut-être la base de données WordPress
  • La manipulation des données de table est plus difficile
  • Vous devez créer votre propre interface utilisateur
  • Vous êtes peut-être plus sujet aux erreurs et aux attaques SQL
  • Vous n’avez pas accès à un quantité de fonctions
  • Vous devrez peut-être gérer votre base de données dans plusieurs versions
  • Vous devez en faire plus pour activer, désactiver et désinstaller des plugins

Dans cet esprit, nous espérons que vous pourrez décider si vous avez besoin ou non d’une table personnalisée. Si tel est le cas, lisez la suite, je vais vous montrer comment en créer un à la manière de WordPress.

Créer une table de base de données

Les tables de base de données doivent être créées lorsqu’elles sont activées. Cela peut être fait par plugin et une fonction dans le hook d’activation en utilisant la méthode suivante:

Cette fonction est exécutée lorsque le plugin est activé par l’utilisateur. Si vous souhaitez en savoir plus, consultez notre tutoriel Crochets pour activer, désactiver et désinstaller les plugins WordPress.

Nous allons utiliser la fonction qui vient d’être liée pour ajouter notre table de base de données avec le dbDelta() Une fonction. Pour utiliser cette fonctionnalité, nous avons besoin d’un nom de base de données (qui utilise le préfixe de table WordPress), du classement de la base de données et d’une requête SQL. L’exemple suivant montre comment la base de données est créée, inspirée de notre plugin d’analyse de site Web:

Nous prenons d’abord notre classement à partir de celui spécifié dans le fichier de configuration WordPress – il est enregistré dans le $wpdb Variable – et nous obtenons le préfixe à partir de là aussi. Nous utiliserons le préfixe pour créer le nom final de la base de données. Avec certains SQL formatés selon certaines règles, nous créons une table de base de données. Nous ajoutons ensuite le fichier qui contient ce dbDelta() Fonction puis exécutez-le, ce qui créera notre base de données.

Formater notre requête SQL

Il existe un certain nombre de règles que nous devons suivre lors du formatage de notre requête SQL. Ce sont les suivants, tirés de la Article du Codex.

  • Vous devez placer chaque champ sur sa propre ligne dans votre instruction SQL.
  • Vous devez avoir deux espaces entre les mots PRIMARY KEY et votre définition de clé primaire.
  • Vous devez utiliser le mot clé KEY au lieu du synonyme INDEX et inclure au moins une KEY.
  • Vous ne pouvez pas utiliser d’apostrophes ou d’accolades autour des noms de champ.
  • Les types de champs doivent tous être écrits en minuscules.
  • Les mots clés SQL tels que CREATE TABLE et UPDATE doivent être en majuscules.

Ceux-ci sont de la dbDelta() Fonction, bien sûr pas SQL. Cette fonction doit identifier les différences entre les schémas de base de données afin de pouvoir mettre à jour les tables de manière efficace et sécurisée si nécessaire. Par conséquent, SQL doit être formaté pour que la fonction puisse le « digérer » facilement.

Mettre à jour les tables de la base de données

Au fil du temps, vous devrez peut-être ajouter des fonctionnalités supplémentaires à votre plugin. Je viens d’ajouter des vues et des clics ci-dessus. Et si vous ajoutez également la durée moyenne de consultation de la page en minutes? Cela nécessiterait une nouvelle colonne et voici dbDelta() est pratique.

Avant de faire quoi que ce soit, nous devons nous assurer que nous avons ajouté notre numéro de version à notre plugin. De cette façon, nous pouvons déterminer quand des changements de base de données sont nécessaires.

Supposons que rien n’a changé dans le schéma de la base de données dans les versions 1.x. Dans la version 2.0, nous ajoutons une colonne. Voici comment cela pourrait fonctionner:

J’ai ajouté une seule colonne, le blog_id, qui nous aiderait à utiliser ce plugin pour les installations multi-sites. Comme vous pouvez le voir, j’ai déterminé si la version de la base de données actuellement utilisée est inférieure à la version du plugin. Si tel est le cas, nous utiliserons le même format pour simplement ajouter une colonne. le dbDelta() La fonction prend en charge tous les changements pour nous, il nous suffit de lui fournir le schéma de base de données correct.

Conclusion

Il n’est généralement pas nécessaire de créer vos propres tables. Cependant, si c’est le cas, la fonction dbDelta nous permet de créer des tables modulaires, flexibles et faciles à entretenir.

Si jamais vous avez besoin d’un tableau, vous devez toujours vous assurer d’utiliser cette approche car c’est le seul moyen de créer des tableaux personnalisés d’une manière conviviale WordPress.

Si vous connaissez un plugin qui ajoute ses propres tables de base de données, faites-le nous savoir dans les commentaires ci-dessous et nous pourrons peut-être le vérifier pour voir s’il fonctionne correctement!