Comprendre et utiliser les relations entre les données dans WordPress

Dans la première partie de cette série sur les données dans WordPress, j'ai donné un aperçu des tables de la base de données WordPress et des tables utilisées pour stocker quel type de données. Dans cette seconde partie, je décrirai comment WordPress gère les relations entre ces données..

Comme vous le verrez, WordPress utilise trois types de relations de données: un à un, un à plusieurs et plusieurs à plusieurs. Je vais regarder chacun de ceux-ci et ce qu'ils signifient pour votre site WordPress.

Relations individuelles

Une relation un-à-un est la relation la plus simple de toutes. Elle signifie simplement qu'un enregistrement est lié à un seul autre. De telles données sont généralement stockées dans une seule table (bien que pas toujours, comme nous le verrons plus tard dans ce tutoriel)..

Voici des exemples de relations individuelles dans WordPress:

  • Identifiant et contenu du post
  • titre et contenu du message
  • après identification et après limace
  • ID de commentaire et contenu du commentaire
  • ID utilisateur et nom d'utilisateur

La liste pourrait continuer, mais le point principal est que deux enregistrements quelconques qui sont stockés dans des champs différents dans une ligne d'une table ont une relation un à un..

Les relations un à un, cependant, constituent le type de relation de base de données le moins intéressant. Alors sans plus tarder, passons à un type de relation très utilisé par WordPress - one-to-many.

Relations un à plusieurs

Les relations un à plusieurs sont très courantes dans les bases de données et sont ce qui rend une base de données plus puissante qu'un tableau "à plat" tel qu'un tableur. Celles-ci se produisent lorsqu'un enregistrement a une relation avec plus d'un autre enregistrement. 

Dans WordPress, la plupart des relations un-à-plusieurs sont créées par un lien entre deux tables de base de données, en utilisant un identificateur unique pour associer les deux. Ainsi, par exemple, le post_id L’enregistrement sera unique pour chaque poste enregistré dans le répertoire. wp_posts table, mais sera également utilisé dans le wp_comments tableau pour identifier la publication à laquelle chaque commentaire a été posté. Cela signifie que chaque post_id la valeur apparaîtra une seule fois dans le wp_posts table mais peut apparaître plusieurs fois - ou pas du tout - dans le wp_comments table.

Quelques autres exemples dans WordPress incluent:

  • posts et metadata post
  • messages et utilisateurs
  • utilisateurs et métadonnées de l'utilisateur
  • taxonomies et termes de taxonomie

Encore une fois, la liste est longue. Comme il s'agit d'un sujet important dans WordPress, examinons plus en détail les relations un à plusieurs..

Relations un à plusieurs impliquant des postes

La table qui est connectée à la plupart des autres tables est la wp_posts table, et la plupart des relations que ces connexions créent sont des relations un-à-plusieurs.

Comme vous pouvez le voir dans le diagramme ci-dessous, le wp_posts table est liée à quatre autres tables:

De plus, les publications peuvent avoir une relation un-à-plusieurs avec d'autres publications, sous la forme de pièces jointes ou de pages parent..

Regardons ces relations plus en détail.

Postes à postes

Comme expliqué ci-dessus, les données stockées dans le wp_posts table peut avoir une relation un-à-plusieurs avec d'autres données de la même table; Cependant, cette relation ne se situe pas entre ce que vous pensez être des publications, mais entre des publications et des pièces jointes ou des pages et d'autres pages. Après tout, les pièces jointes et les pages sont des types de publication.

Une pièce jointe stockée dans le wp_posts table aura un enregistrement dans le post_parent champ, qui sera l'ID du poste auquel l'attachement est attaché (avec des excuses pour la répétition!). Il s'agit d'une relation un-à-plusieurs, car chaque pièce jointe n'aura qu'un seul parent, alors que chaque publication pourrait avoir plusieurs pièces jointes. Ceci s'appliquera même si vous avez utilisé le Gestionnaire de médias pour ajouter une pièce jointe à une autre publication - seule la publication à laquelle elle a été ajoutée à l'origine sera stockée dans la base de données en tant que parent..

Les publications peuvent également avoir une relation un-à-plusieurs avec d'autres publications lorsqu'une page est spécifiée en tant que parent d'une autre. L’enregistrement est stocké dans la page enfant, dans le dossier post_parent domaine - encore une fois ce sera le post_id de la page parent. Il s'agit d'une relation un-à-plusieurs, car les pages parent peuvent avoir plusieurs pages enfants, mais les pages enfants ne comportent qu'une seule page parent..

Lorsque vous réfléchissez aux relations entre les publications de ce type, il est important de garder à l'esprit que, lors de la gestion des données WordPress, les publications ne sont pas ce que vous pourriez normalement appeler des publications. Ils comprennent les pages, les pièces jointes et d’autres types de publication, qui sont tous stockés dans le répertoire. wp_posts table.

Métadonnées post-post

Les métadonnées post sont stockées dans sa propre table wp_postmeta. Ce tableau ne comprend que quatre champs - pour le post_id, la meta_id, la clé et la valeur. Plusieurs publications de métadonnées de publication peuvent être associées à une publication, mais chaque enregistrement de métadonnées de publication ne sera lié qu'à une publication..

Posts-to-Comments

Les commentaires ont aussi leur propre table, wp_comments. Chaque commentaire ne porte que sur un article, alors que chaque article peut contenir plusieurs commentaires. Comme pour toutes les autres tables liées à wp_posts, la post_id le champ est utilisé pour le lien (dans le comment_post_id champ dans wp_comments).

le wp_comments La table a 15 champs par défaut, pour stocker des données sur l'auteur, l'adresse email de l'auteur, le commentaire lui-même et son statut d'approbation. C'est aussi lié au wp_users table, comme nous le verrons dans la section suivante.

Les commentaires ont également leurs propres métadonnées, stockées dans une autre table, sur laquelle je reviendrai dans quelques instants..

Postes aux utilisateurs

Chaque message est attaché à la wp_users tableau via le identifiant d'utilisateur enregistrement, qui est stocké dans le post_author champ dans wp_posts. Il s'agit d'une relation un-à-plusieurs, car chaque publication n'a qu'un seul auteur, mais chaque utilisateur peut être l'auteur de plusieurs publications..

La relation entre les publications et les utilisateurs est différente de celle entre les publications et les commentaires ou les métadonnées, car sa nature est celle d'un utilisateur, de plusieurs publications, et non d'une publication de plusieurs commentaires ou enregistrements de données météo. C'est pourquoi le identifiant d'utilisateur champ fournit le lien au lieu de la post_id champ.

Relations un à plusieurs n'impliquant pas de postes

Il existe également trois relations qui sont un-à-plusieurs et n'impliquent pas de posts. Deux d'entre elles impliquent des métadonnées - la relation entre les commentaires et leurs métadonnées et les utilisateurs et leurs métadonnées..

Métadonnées entre utilisateurs

WordPress stocke des métadonnées supplémentaires sur les utilisateurs de la wp_usermeta table. Ceci est généralement utilisé pour les données non standard sur les utilisateurs, telles que les métadonnées sur les superadmins d'une installation multisite et les métadonnées sur les couleurs d'administration qu'un utilisateur a sélectionnées si elles ne sont pas les couleurs par défaut.. 

La plupart des données sur les utilisateurs seront dans le wp_users table. Les deux tables sont liées via le identifiant d'utilisateur plusieurs enregistrements de métadonnées sont associés à un champ et à un enregistrement d'utilisateur, tandis que chaque élément de métadonnées ne s'applique qu'à un seul utilisateur.

Métadonnées de commentaires en commentaires

Encore une fois, la plupart des données sur les commentaires sont stockées dans wp_comments tableau avec le commentaire lui-même, mais le wp_commentmeta table est utilisée pour stocker des métadonnées supplémentaires telles que des données créées par des plugins tels qu'Akismet. La relation est la même qu'entre les utilisateurs et usermeta.

Commentaires aux utilisateurs

La dernière relation un à plusieurs se situe entre les commentaires et les utilisateurs. le wp_comments la table comprend le identifiant d'utilisateur Ce champ peut être utilisé pour stocker l'ID utilisateur lorsqu'un utilisateur connecté a posté un commentaire. Notez que ce champ n'est pas obligatoire pour les sites où les utilisateurs n'ont pas besoin d'être connectés pour commenter..

Relations plusieurs à plusieurs

Le dernier type de relation de base de données est la relation un-à-plusieurs, où le lien multiple va dans les deux sens. Ceci n'est utilisé qu'une seule fois dans WordPress, pour les termes de taxonomie (y compris les catégories et les balises car il s'agit simplement de taxonomies). Plusieurs postes peuvent être attribués à un poste et plusieurs mandats à un seul..

WordPress crée cette relation de la même manière que toute autre base de données avec une base de données manay-to-many: en utilisant une table intermédiaire reliant les deux tables aux données de clé. C'est le wp_term_relationships tableau, qui relie le wp_posts table à la wp_term_taxonomy table. 

Remarque: Ce tableau relie également les wp_links table à la wp_term_taxonomy table, car les liens se comportent de la même manière que les messages - je reviendrai bientôt sur les liens.

Cela s’explique facilement en regardant d’abord les deux tables périphériques. le wp_posts tableau contient des données sur chaque poste, tandis que le wp_term_taxonomy tableau contient des données sur chaque terme, y compris la taxonomie dans laquelle il se trouve et son identifiant. 

Pour créer un lien entre un terme dans la wp_term_taxonomy table et un poste dans le wp_posts table, WordPress crée un enregistrement dans le wp_term_relationships table, qui comprend le post_id et le term_id (stocké sous object_id et term_taxonomy_id respectivement dans le wp_term_relationships table). Cela signifie que le wp_term_relationships table peut inclure plusieurs enregistrements pour chaque publication et plusieurs enregistrements pour chaque terme, créant ainsi une relation plusieurs à plusieurs..

Le diagramme ci-dessous montre comment cela fonctionne:

Dans l'exemple ci-dessus, les publications ont les termes suivants:
  • post 1 contient les termes 1 et 3
  • poste 2 a terme 2
  • poste 3 a terme 4
  • post 4 a les termes 1 et 3

Vous pouvez également voir les choses sous un autre angle - par exemple, le terme 3 concerne les postes 1 et 4..

Cependant, les choses ne s'arrêtent pas là. Il y a une quatrième table, la wp_terms table. Cela contient des données sur chaque terme, à savoir le nom, le slug et la description de chaque terme. Chaque terme a un seul enregistrement dans la wp_terms table, de sorte que la relation entre cela et le wp_term_taxonomy la table est en fait un-à-un. Théoriquement, il n'y a aucune raison pour que ces données ne puissent pas être conservées dans la mémoire. wp_term_taxonomy table, mais ce n'est pas.

Une note sur les liens

Liens, ou blogroll, est une fonctionnalité de WordPress beaucoup moins importante qu’elle ne l’était auparavant. En fait, depuis la version 3.5, les liens ont été désactivés dans l’administrateur par défaut; cependant, ils ont leur propre table: la wp_links table. 

Ceci est très similaire à la wp_posts table. Après tout, les liens sont un type de contenu très similaire aux articles) et ont la même relation plusieurs-à-plusieurs avec les termes de taxonomie.

Résumé

Comme nous l’avons vu, WordPress utilise diverses relations pour lier des données dans 10 de ses 11 tables de base de données. La seule table que je n'ai pas mentionnée ici est wp_options, parce que cela n'est lié à aucune autre table, car il stocke simplement des données sur le site, plutôt que sur le contenu. Je couvrirai cela plus en détail plus tard dans cette série.

En comprenant les relations un à un, un à plusieurs et plusieurs à plusieurs dans WordPress, vous pourrez ainsi identifier des moyens de manipuler vos données et d'écrire des requêtes personnalisées dans votre thème et / ou vos plugins..

Dans la prochaine partie de cette série, je traiterai plus en détail des types de contenu, en examinant les types de contenu stockés dans la base de données WordPress, ainsi que leurs similitudes et leurs différences..