J'ai un type de message personnalisé et une metabox avec une entrée de fichier.
Je peux insérer la pièce jointe, mais je ne peux pas mettre à jour les métadonnées de la pièce jointe et je ne sais pas comment la corriger car je ne reçois aucune erreur.
Voici mon code:
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
echo $attach_id;
echo '<pre>';
print_r($filename);
echo '</pre>';
echo '<pre>';
print_r($attach_data);
echo '</pre>';
et voici la sortie:
96
Array
(
[name] => one.png
[type] => image/png
[tmp_name] => /tmp/phphQ0e2v
[error] => 0
[size] => 144555
)
Array
(
)
Comme vous pouvez le voir, $ attach_data est vide :(
Du commentaire:
Laissez WordPress générer un chemin de fichier et utilisez-le pour les prochaines étapes:
$upload = wp_handle_upload($filename, array('test_form' => false));
$attach_id = wp_insert_attachment( $attachment, $upload['file'], $post_id );
wp_update_attachment_metadata( $attach_id, $attach_data );
Voici ce qui a finalement été résolu pour moi:
apply_filters('wp_handle_upload', array(
'file' => $file_path,
'url' => $file_url,
'type' => $file_type),
'upload');
Explication: Je ne sais pas trop pourquoi cela a corrigé l'erreur pour moi, mais je suppose que cela a quelque chose à voir avec les plugins utilisant le hook wp_handle_upload ou que les filtres ajoutent des métadonnées à la pièce jointe, qui autrement manquerait la fonction wp_generate_attachment_metadata.
Fonction complète:
function add_to_media_lib($file_url, $file_path, $parent_post_id)
{
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
// Check the type of tile. We'll use this as the 'post_mime_type'.
$file_type = wp_check_filetype(basename($file_url), null);
// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($file_url),
'post_mime_type' => $file_type['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($file_url)),
'post_content' => '',
'post_status' => 'inherit',
'post_parent' => $parent_post_id
);
// Insert the attachment.
$attach_id = wp_insert_attachment($attachment, $file_url, $parent_post_id);
// apply filters (important in some environments)
apply_filters('wp_handle_upload', array('file' => $file_path, 'url' => $file_url, 'type' => $file_type), 'upload');
// Generate the metadata for the attachment, and update the database record.
if ($attach_data = wp_generate_attachment_metadata($attach_id, $file_path)) {
wp_update_attachment_metadata($attach_id, $attach_data);
} else {
echo '<div id="message" class="error"><h1>Failed to create PDF-thumbnail Meta-Data</h1><pre>' . print_r($attach_data) . '</pre></div>';
}
return $attach_id;
}