web-dev-qa-db-fra.com

Comment supprimer 20 Go d'images redimensionnées?

Je veux supprimer toutes les images redimensionnées tout en laissant l'image d'origine. J'ai plus de 20 Go de données inutilisées prenant de la place sur le serveur. Par exemple:

  • first-image-name.jpg
  • nom-première-image-72x72.jpg
  • nom-première-image-150x150.jpg
  • nom-première-image-250x250.jpg
  • nom-première-image-300x300.jpg
  • nom-première-image-400x400.jpg
  • nom-première-image-1024x1024.jpg
  • second-image-name.jpg
  • deuxième-image-nom-72x72.jpg
  • deuxième-image-nom-150x150.jpg
  • deuxième-image-nom-250x250.jpg
  • deuxième-image-nom-300x300.jpg
  • deuxième-image-nom-400x400.jpg
  • deuxième-image-nom-1024x1024.jpg

Existe-t-il un moyen de supprimer toutes les images redimensionnées et de ne plus en créer à l'avenir?

4
Mohamed Gamal

La majorité des réponses ont indiqué comment arrêter de créer les futures tailles d'image par défaut, mais cela ne permet pas de créer des tailles personnalisées dans votre thème, mais voici une autre solution à ajouter à functions.php:

function wpse_240765_unset_images( $sizes ){
    unset( $sizes[ 'thumbnail' ]);
    unset( $sizes[ 'medium' ]);
    unset( $sizes[ 'medium_large' ] );
    unset( $sizes[ 'large' ]);
    unset( $sizes[ 'full' ] );
    return $sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'wpse_240765_unset_images' );

et vous pouvez également désactiver la génération future d'images par défaut en réglant les images sur zéro:

 enter image description here 

mais pour supprimer les images autres que les originaux, j’ai rencontré le même problème lorsque j’ai oublié de le configurer pour ne pas le faire et ce que j’ai fait est le suivant:

  • Téléchargez toutes les photos localement en utilisant un service SFTP, j'adore Transmettre (payant), mais vous pouvez utiliser quelque chose comme Filezilla (gratuit).

  • Téléchargez tous les fichiers dans un répertoire.

Je suis sur un Mac mais tout terminal qui permet bash fonctionnera. J'ai codé un script bash simple:

# !/bin/bash

USERNAME=vader
DIRECTORY="/Users/$USERNAME/desktop/question240765"
for imageWithSize in $(find "$DIRECTORY" -type f -regex '.*/[a-z-]*-[0-9].*.txt$'); do
    cd $DIRECTORY
    echo rm $imageWithSize
done

Le dossier se trouve sur mon bureau et, pour la question, je l’ai nommé question240765. J'ai utilisé des fichiers .txt pour tester cela, mais vous pouvez le changer en .jpg. Je l'ai sauvegardé dans un fichier bash image_dust.sh afin qu'il me permette de le modifier ou de l'améliorer ultérieurement. Commencez par exécuter le script avec la variable echo. Vous pouvez même le sauvegarder dans un fichier en modifiant la ligne:

echo rm $imageWithSize 

à:

echo rm $imageWithSize >> result.txt

qui consignera tout dans le fichier result.txt et vous permettra de le parcourir avant de vraiment les supprimer. Si tout va bien, changez cette ligne en:

rm $imageWithSize

Si vous êtes curieux, voici ce que fait la regex:

  • [a-z-]* recherche des noms de fichiers tels que foo-bar ou fo-fo-bar. si vous avez des lettres majuscules, utilisez [A-Za-z-]*
  • -[0-9] après le nom du fichier, il cherche le - restant (tiret) avec un numéro [0-9]
  • .*.txt recherche tout ce qui se trouve après le premier chiffre jusqu'à la fin du nom avec l'extension.

Après avoir terminé le script et l'exécuter. Vous pouvez tout détruire sur votre site et télécharger à nouveau les images. Si la taille du fichier vous inquiète, j'utiliserais même imagemagick mais je préfère sips pour réduire la taille de compression des images.

Pour supprimer tous les fichiers d'image superflus, nous devrons parcourir toutes les publications, trouver les pièces jointes à ces publications, déterminer quelles tailles d'images attachées ne sont plus nécessaires et supprimer ces fichiers. Et c'est parti.

Tout d’abord, récupérez tous les articles et pages (personnalisés) et parcourez-les en boucle:

$the_query = new WP_Query (array ('posts_per_page' => -1, 'post_type' => 'any'));
foreach ($all_posts as $post) { ... }

Suivant pour $postobtenez toutes les images jointes et obtenez une liste de tous les formats de support . Ensuite, parcourez-les:

$images = get_attached_media ('image',$post); // returns array of post objects
$sizes = get_intermediate_image_sizes(); // returns array of identifying strings
foreach ($images as $image) {
  foreach ($sizes as $size) {
    ...
    }
  }

Maintenant pour cette image et sa taille, trouvez l’URL et supprimez le fichier

$att = wp_get_attachment_image_src ($image->ID,$size); returns array of file properties
wp_delete_file ($att['url']);

Je soumettrais ce code à un test approfondi avant de l'appliquer ... L'exécution de 20 Go en images peut également prendre un certain temps.

1
cjbj

Aucune idée, comment supprimer les images existantes. Mais vous pouvez arrêter de générer des tailles d’image pour les nouvelles images que vous allez télécharger.

Si vous aimez écrire des codes: Placez cet extrait de code dans le fichier functions.php de votre thème-

add_filter( 'intermediate_image_sizes_advanced', 'wpse_240765_image_sizes' );

function wpse_240765_image_sizes( $sizes ){
    $sizes = array();
    return $sizes;
}

Ou avec un plugin: Utilisez ce plugin- https://wordpress.org/plugins/image-sizes/

Cela vous donnera le même résultat. Vous pouvez même choisir la taille d'image que vous souhaitez empêcher de créer.  enter image description here 

1
mukto90

Si vous avez un accès SSH, vous pouvez exécuter les commandes suivantes pour répertorier et supprimer les images redimensionnées. Plus tard, vous pourrez les reconstruire.

Répertorie toutes les images redimensionnées.

# List all resized images.
# Usage: lrimg site.ext
function lrimg() {
  clear
  THE_PWD=$PWD
  cd ~
  cd /var/www/"$1"/htdocs/wp-content/uploads/
  find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f
  cd $THE_PWD
}

Supprimer toutes les images redimensionnées.

# Remove all resized images.
# Usage: lrimgrm site.ext
function lrimgrm() {
  clear
  THE_PWD=$PWD
  cd ~
  cd /var/www/"$1"/htdocs/wp-content/uploads/
  find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f -exec rm {}  \;
  cd $THE_PWD
}

Soyez prudent ici. Gardez vos sauvegardes prêtes.

P.S. Mon serveur a une configuration NGINX, raison pour laquelle les chemins de site sont /var/www/"$1"/htdocs/ $ 1 étant le paramètre correspondant au nom du site. Vous pouvez le modifier pour correspondre à votre chemin.

1
Ahmad Awais

Les étapes qui suivent devraient le faire:

1) Vous devriez commencer par supprimer toutes les tailles d’image inutiles de vos fichiers pertinents, par exemple. les fonctions. PHP dans votre thème et dans les plug-ins éventuels (par exemple, sans gouvernail).

2) Ensuite, vous pouvez supprimer toutes les tailles d'image requises via FTP.

3) Ensuite, vous devez régénérer les vignettes (par exemple, toutes les tailles d’images que Wordpress doit créer.) Vous pouvez utiliser n’importe quel plug-in 'Régénérer les vignettes' à partir du repo WP.

Sinon, essayez ceci: 1) Identique à l'étape 1 ci-dessus

2) Il y a quelques plugins dans le répertoire de plugins (repo) qui vont supprimer tous les WP thumbs et ne générer que les thumbs lorsqu'ils sont appelés pour la première fois sur une page donnée de votre site Web. Lors d'une demande ultérieure pour l'image, l'image existera déjà et sera servie normalement. L'avantage de cela est que les vignettes ne sont créées que pour les images/tailles réellement requises par votre site. Toutefois, les images appelées de manière non standard risquent de ne pas être générées.

Si vous souhaitez réduire les coûts supplémentaires liés aux images originales trop volumineuses, vous pouvez utiliser le plug-in 'imsanity' pour réduire la taille du fichier physique de ces originaux à une taille de votre choix. C'est un excellent outil pour les sites contenant des images soumises par les utilisateurs.

0
Phill Healey

1) Pour empêcher WordPress de créer plusieurs tailles d’image lors du téléchargement d’une image, vous pouvez le faire sans passer par un plugin.

Accédez à Paramètres > Média dans la section admin.

En définissant les tailles sur 0 , vous empêcherez WordPress de créer des tailles d'image par défaut et seule l'image d'origine sera stockée.

 enter image description here 

2) Pour réduire les 20 Go d'images que vous avez sur votre site, je voudrais simplement utiliser SFTP sur votre serveur et supprimer manuellement les images de différentes tailles. À partir du répertoire racine d’une installation WordPress, accédez à wp-content/uploads/<yyyy>/<mm>/ et vous trouverez toutes vos images et vos téléchargements multimédias. Vous voulez être sûr de laisser l'image originale, sinon vous supprimez simplement l'image entière. Tout nom de fichier image avec un - ###x###.jpg supplémentaire est une image générée automatiquement. L'image d'origine n'aurait pas cela dans le nom du fichier.

En passant - pour vous aider avec vos images, je vérifierais le plugin WP-Smush de WPMU DEV.

WP-Smush - Optimisation de l'image

C'est vraiment génial et lorsque vous téléchargez des images, il utilise automatiquement leurs serveurs pour les compresser et les compresser avant de les stocker. Il peut également réduire la taille des images de grande résolution à une taille maximale raisonnable. Vous ne devriez vraiment pas avoir à afficher une image plus grande que 2048x2048.

0
italiansoda