web-dev-qa-db-fra.com

Comment renommer un nom de fichier en pièce jointe avec php

J'ai l'ID de l'image téléchargée et j'ai besoin de la renommer en utilisant php.

(Les raisons parce que je dois le faire sont difficiles à expliquer et je pense qu'elles ne sont même pas nécessaires pour les besoins de cette discussion)

J'ai 4 problèmes à résoudre:

  1. Renommez les fichiers file.jpg ainsi que les fichiers file-WIDTH-HEIGHT.jpg associés - simplement résolus avec renommer la fonction php
  2. Réaffectez le nouveau nom de fichier à la pièce jointe afin que WordPress connaisse le nouveau nom de fichier (puis-je le faire en mettant à jour la colonne 'guid' de la pièce jointe dans la base de données?)
  3. Gérez les fichiers associés (fichier-WIDTH-HEIGHT.jpg). Où sont stockées les relations entre le fichier principal et les fichiers associés?
  4. Mettez à jour tout cela sur posts/widget/ecc. (puis-je le faire avec une procédure de remplacement de chaîne 'simple' sur le fichier SQL exporté de la base de données?)

Comme vous pouvez le constater, j'ai un peu de confusion à l'esprit car je ne connais pas parfaitement le moyen utilisé par WordPress pour gérer les pièces jointes d'un point de vue système/base de données.

Merci pour toutes les suggestions.

1
Marco Panichi

Allons voir. Si je prends des pièces jointes arbitraires dans mon installation de développement et que je vide ses objets post et ses champs personnalisés, j'obtiens ce qui suit:

object WP_Post (24) {
    public ID -> integer 1687
    public post_author -> string (1) "1"
    public post_date -> string (19) "2013-09-18 14:37:07"
    public post_date_gmt -> string (19) "2013-09-18 21:37:07"
    public post_content -> string (0) ""
    public post_title -> string (24) "dsc20050604_133440_34211"
    public post_excerpt -> string (0) ""
    public post_status -> string (7) "inherit"
    public comment_status -> string (4) "open"
    public ping_status -> string (6) "closed"
    public post_password -> string (0) ""
    public post_name -> string (24) "dsc20050604_133440_34211"
    public to_ping -> string (0) ""
    public pinged -> string (0) ""
    public post_modified -> string (19) "2013-09-18 14:37:07"
    public post_modified_gmt -> string (19) "2013-09-18 21:37:07"
    public post_content_filtered -> string (0) ""
    public post_parent -> integer 0
    public guid -> string (76) "http://dev.rarst.net/wp-content/uploads/2013/09/dsc20050604_133440_34211.jpg"
    public menu_order -> integer 0
    public post_type -> string (10) "attachment"
    public post_mime_type -> string (10) "image/jpeg"
    public comment_count -> string (1) "0"
    public filter -> string (3) "raw"
}

array(2) [
    '_wp_attached_file' => array(1) [
        string (36) "2013/09/dsc20050604_133440_34211.jpg"
    ]
    '_wp_attachment_metadata' => array(1) [
        string (687) "a:5:{s:5:"width";i:640;s:6:"height";i:480;s:4:"file";s:36:"2013/09/dsc20050604_133440_34211.jpg";s:5:"sizes";a:2:{s:9:"thumbnail";a:4:{s:4:"file";s:36:"dsc20050604_133440_34211-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:6:"medium";a:4:{s:4:"file";s:36:"dsc20050604_133440_34211-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";d:2;s:6:"credit";s:0:"";s:6:"camera";s:9:"CYBERSHOT";s:7:"caption";s:0:"";s:17:"created_timestamp";i:1117892080;s:9:"copyright";s:0:"";s:12:"focal_length";s:3:"9.7";s:3:"iso";s:3:"100";s:13:"shutter_speed";s:6:"0.0125";s:5:"title";s:0:"";}}"
    ]
]

Les plats à emporter sont respectivement à vos questions:

  1. Le champ guid n'a pas d'importance , il contient une copie de l'URL calculée (mais ce n'est pas supposé pour être une URL fiable dans le contexte WP), elle doit généralement être ignorée.
  2. La relation entre le fichier principal et les tailles est stockée dans des champs méta personnalisés.
  3. Le remplacement simple ne fonctionnera pas , il gâchera la chaîne sérialisée dans le champ méta _wp_attachment_metadata. Vous avez besoin d'un outil de recherche/remplacement sensible à la sérialisation. Il en existe plusieurs (WP CLI, Recherche Remplacer une base de données, etc.).
3
Rarst