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.
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:
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.
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:
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..
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.
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.
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..
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..
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.
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..
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.
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.
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..
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: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.
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.
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..