J'ai essayé pas mal de recherches, mais rien n'a encore été obtenu. J'ai un client qui doit télécharger beaucoup d'images dans des galeries et pour gagner du temps, il enregistre les légendes sous le nom de fichier lorsqu'il est dans Photoshop. Personnellement, je préférerais le faire dans WP, mais c’est le flux de travail qu’il a et qui ne bouge pas!
Existe-t-il un moyen de récupérer le nom de fichier pré-assaini et de l'enregistrer en tant que métadonnées?
J'ai regardé wp_handle_upload_prefilter
mais cela ne correspond pas au bon point d'après ce que je peux voir.
Malheureusement, wp_handle_upload_prefilter
hook ne reconnaît pas encore d'ID de pièce jointe. Il est trop tôt et exécute le nom de fichier pré-assaini (avant de déplacer la pièce jointe et de la stocker sous forme de publication)
Ce que vous pouvez faire, c'est utiliser ce hook wp_handle_upload_prefilter
mais stocker à la place un transitoire de courte durée contenant le nom de fichier pré-assaini.
Une fois la pièce jointe ajoutée, nous pouvons vérifier cela avec add_attachment()
hook. Vous pouvez mettre à jour le titre, la légende ou toute autre métadonnée de la pièce jointe en utilisant la valeur transitoire stockée.
Enfin, vous supprimerez le transitoire.
J'ai effectivement testé cette méthode et semble fonctionner avec des téléchargements de pièces jointes multiples et uniques sur mon installation localhost.
Ok c'est comment vous pouvez le faire avec du code.
set_transient
add_action( 'wp_handle_upload_prefilter', '_remember_presanitized_filename' );
function _remember_presanitized_filename( $file ) {
$file_parts = pathinfo( $file['name'] );
set_transient( '_set_attachment_title', $file_parts['filename'], 30 );
return $file;
}
add_action( 'add_attachment', '_set_attachment_title' );
function _set_attachment_title( $attachment_id ) {
$title = get_transient( '_set_attachment_title' );
if ( $title ) {
// to update attachment title and caption
wp_update_post( array( 'ID' => $attachment_id, 'post_title' => $title, 'post_excerpt' => $title ) );
// to update other metadata
update_post_meta( $attachment_id, '_wp_attachment_image_alt', $title );
// delete the transient for this upload
delete_transient( '_set_attachment_title' );
}
}