web-dev-qa-db-fra.com

Supprimer l'image d'origine - conserver la vignette?

J'utilise beaucoup de vignettes mais jamais le fichier d'origine. Pour économiser de l'espace, j'aimerais éviter que l'original ne soit enregistré sur le disque, mais ne conservez qu'une vignette de 100 pixels. Comment puis-je faire ceci?

Merci Dennis

7
FLX
add_filter( 'wp_generate_attachment_metadata', 'delete_fullsize_image' );
function delete_fullsize_image( $metadata )
{
    $upload_dir = wp_upload_dir();
    $full_image_path = trailingslashit( $upload_dir['basedir'] ) . $metadata['file'];
    $deleted = unlink( $full_image_path );

    return $metadata;
}
10
Cristian

Je trouve une autre solution sur le Web. C'est basé sur celui accepté ici, mais ça va encore plus loin.

Celui, accepté ici, supprime l'image principale et continue. La solution que j'ai trouvée remplace l'image d'origine par l'image générée pour "grande". Il continue simplement sans remplacer si cette résolution d'image n'est pas définie.

De cette façon, il est garanti que chaque script, s’appuyant sur l’image d’origine, fonctionnera toujours comme avant, par exemple la régénération de la colonne.

http://www.wprecipes.com/how-to-automatically-use-resized-image-instead-of-originals

EDIT:

@dalbaeb m'a signalé un problème écrit dans les commentaires sur le blog. J'ai réécrit le code basé sur l'API au lieu de la solution fournie ici. Ce n'est pas tellement une différence, mais juste d'utiliser les mêmes appels de fonction que dans l'API;)

function replace_uploaded_image($image_data) {
    // if there is no large image : return
    if (!isset($image_data['sizes']['large'])) return $image_data;

    // paths to the uploaded image and the large image
    $upload_dir = wp_upload_dir();
    $uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
    $large_image_filename = $image_data['sizes']['large']['file'];

    // Do what wordpress does in image_downsize() ... just replace the filenames ;)
    $image_basename = wp_basename($uploaded_image_location);
    $large_image_location = str_replace($image_basename, $large_image_filename, $uploaded_image_location);

    // delete the uploaded image
    unlink($uploaded_image_location);

    // rename the large image
    rename($large_image_location, $uploaded_image_location);

    // update image metadata and return them
    $image_data['width'] = $image_data['sizes']['large']['width'];
    $image_data['height'] = $image_data['sizes']['large']['height'];
    unset($image_data['sizes']['large']);

    // Check if other size-configurations link to the large-file
    foreach($image_data['sizes'] as $size => $sizeData) {
        if ($sizeData['file'] === $large_image_filename)
            unset($image_data['sizes'][$size]);
    }

    return $image_data;
}
add_filter('wp_generate_attachment_metadata', 'replace_uploaded_image');

EDIT2:

J'ai eu un problème avec le code sur un client où une autre configuration de taille liée au fichier volumineux. J'ai mis à jour le code en conséquence. Si vous rencontrez des problèmes, envoyez-moi un courrier.

4
SimonSimCity

Je viens de créer un plugin parce que j'ai eu le même problème. Vous pouvez le télécharger depuis here

1
Carlos Minatti