web-dev-qa-db-fra.com

Régénérez les vignettes après le téléchargement

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.

2
Warface

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.

3
Warface