web-dev-qa-db-fra.com

wp_generate_attachment_metadata retourne un tableau vide

        foreach ($_FILES as $key => $file) {
            $uploadedImage = wp_handle_upload($_FILES[$key], $upload_overrides);

            pre_r($uploadedImage);

            if (!isset($uploadedImage['error'])) {

                $attachID = wp_insert_attachment($uploadedImage, $uploadedImage['file']);

                require_once(ABSPATH . 'wp-admin/includes/image.php');
                $attach_data = wp_generate_attachment_metadata( $attachID, $uploadedImage['file'] );

                print_r($attach_data);

                wp_update_attachment_metadata( $attachID, $attach_data );

            } else {

            }
        }

Je suis presque certain que ce code devrait fonctionner. J'ai regardé autour de moi et les gens disaient une fois que le require_once était ajouté.

Le téléchargement fonctionne, le fichier est ajouté à la bibliothèque multimédia mais aucune métadonnée n'est générée.

Aucune suggestion?

5
Aaron

Je crois que ce qui suit se passe ici:

  1. Comme @Luke a souligné , wp_insert_attachment() prend un tableau de données post. Le format du tableau que vous passez est incorrect. Les clés sont différentes. Ce qui devrait être stocké en tant que post_mime_type est transmis avec la clé type. Pour cette raison, aucun type MIME n'est enregistré pour le post.
  2. wp_generate_attachment_metadata() est recherche le type mime afin qu'il puisse générer les métadonnées en fonction de cela. Mais comme le type mime n'a pas été enregistré correctement, il ne retourne qu'un tableau vide.

La solution est de faire $uploadedImage['post_mime_type'] = $uploadedImage['type'], ou mieux encore, utilisez media_handle_upload() , qui gérera le téléchargement de média dans son intégralité.

Exemple basé sur votre code:

foreach ( $_FILES as $key => $file ) {
    media_handle_upload( $key, 0, array(), $upload_overrides );
}
1
J.D.