J'ai ce joli petit code venant directement du codex Wordpress
if($_FILES['user_picture']['size'] != 0):
if ( ! function_exists( 'wp_handle_upload' ) ) require_once( ABSPATH . 'wp-admin/includes/file.php' );
$uploadedfile = $_FILES['user_picture'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
if ( $movefile ) {
$wp_filetype = $movefile['type'];
$filename = $movefile['file'];
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype,
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename);
}
endif;
Le fait est que cela fonctionne très bien, mais cela ne crée pas toute la taille de l'image définie dans le fichier function.php. Je ne veux pas exécuter un plugin qui régénère une vignette chaque fois que je télécharge une image, il doit y avoir un moyen de créer toutes ces vignettes après le téléchargement. Comment ?
Mettre à jour
Après quelques recherches sur le fonctionnement des autres scripts, je dois récupérer le fichier et utiliser la fonction wp_get_image_editor
pour me faire plaisir… un peu pénible. Je ne peux pas croire que WordPress ne redimensionne pas les images après avoir exécuté wp_handle_upload
ou wp_insert_attachment
.
Ajouter
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
après
$attach_id = wp_insert_attachment( $attachment, $filename);
Fixe le.