Après que les produits factices Woocommerce soient importés, je remarque que dans la base de données, il existe différents enregistrements dans différentes tables, mais pointez sur la même pièce jointe photo.
La question est pourquoi? Quelles sont les différences entre ces enregistrements? Est-ce une duplication/redondance dans le stockage de données?
Prenons post_id=16
comme ci-dessous instantané. Nous verrions comme ci-dessous.
wp_posts
, l'id = 16 post a post_type
= pièce jointe et sa guid
pointe sur T1_front_1.jpg
image.wp_postmeta
, celle avec post_id = 16 prend également le meta_key
en tant que _wp_attachment_file
et meta_value
pointe vers la même image T1_front_1.jpg
.Le tableau posts contient des informations sur la pièce jointe post.
Dans WordPress, chaque média téléchargé possède sa propre entrée de publication, où post_type
est 'attachment'
et post_status
est 'inherit'
.
En fait, vous pouvez obtenir des types de publication en pièce jointe à l'aide de fonctions utilisées pour obtenir d'autres types de publication, telles que publication, page ou tout type de CPT.
Cela inclut WP_Query
, get_posts()
et get_post()
.
posts
Pour chaque poste d'attachement
post_title
est utilisée pour la pièce jointe titrepost_excerpt
est utilisé pour la pièce jointe légendepost_content
est utilisé pour la pièce jointe descriptionNotez que le type de publication de pièce jointe peut avoir un post_parent
qui pointe vers l'ID de la publication à partir de laquelle la pièce jointe a été téléchargée.
Par exemple:
get_posts( 'post_type=attachment&post_parent=10' );
Récupérez tous les objets de publication pour les pièces jointes chargées à partir de la page de modification de la publication avec l'ID 10
;
Cependant, il existe des informations sur les médias (en particulier les images) qui ne correspondent tout simplement pas au tableau des publications.
Toutes ces informations sont stockées dans la table postmeta, où la colonne post_id
fait référence à la ligne de pièce jointe dans la table posts.
postmeta
Par exemple, l'attribut "alt"
est stocké dans un champ méta contenant la clé'_wp_attachment_image_alt'
.
Le champ méta avec la clé'_wp_attached_file'
contient le chemin relatif (vers le dossier de contenu) du fichier téléchargé.
Cela est utilisé pour créer l'URL et le chemin de la pièce jointe, dans des fonctions telles que wp_get_attachment_url()
, wp_get_attachment_image_src()
, get_attached_file()
et ainsi de suite.
Enfin, le champ '_wp_attachment_metadata'
contient différentes informations (dans un tableau sérialisé de la base de données):
'width'
et 'height'
)En fait, chaque fois qu'une image est téléchargée, WordPress en crée différentes copies dans différentes tailles.
Veuillez lirecette réponsepour plus de détails.
La clé "sizes"
dans le champ '_wp_attachment_metadata'
contient un tableau contenant des informations sur toutes les images générées: le fichier créé, la taille (largeur et hauteur), etc.
Notez que le moyen privilégié d’obtenir des informations à partir de '_wp_attachment_metadata'
n’utilise pas le commun} _ get_post_meta()
mais le wp_get_attachment_metadata()
spécifique, car il déclenche un filtre.
Si vous souhaitez obtenir des informations sur une image générée spécifique, la fonction image_get_intermediate_size()
sera pratique.
De manière générale, si vous avez besoin d’informations sur une pièce jointe, utilisez les fonctions spécifiques et évitez d’extraire des données de la base de données; il est plus difficile et ne déclenche pas de points d'ancrage, brisant éventuellement la compatibilité du noyau, du thème et des plugins.
Il y a beaucoup de fonctions dans WordPress pour travailler avec des pièces jointes, ceci devrait vous donner une idée ...
Cependant, toutes les fonctions principales sont énumérées dans cette réponse.
La première montre le chemin du fichier de la pièce jointe, la seconde est la taille, le type, la hauteur, la largeur, etc. des attributs de fichier.
Merci
pièce jointe dans wp_post affiche les détails de base de la pièce jointe: titre, heure, auteur, etc.
wp_postmeta montre pièce jointe tous les autres détails. Par exemple, pièce jointe serait un texte, un fichier PDF, une image, etc., de manière à avoir différentes métadonnées pour différents types de publication.
Merci