Wie lösche ich alle generierten Bilder von meinem Server außer denen, die derzeit in Posts verwendet werden?

Ich habe eine neue Reihe von Bildgrößen für das Design meiner Website in Entwicklung. Mein Server ist mit alten Bildgrößen gefüllt, von denen die meisten noch nie benutzt wurden. Du hast das schon mal gehört, oder?

Die Frage
Wie lösche ich alle WP-generierten Thumbnails von meinem Server, aber nicht die aktuell in Posts verwendeten Thumbnails ?

Das heißt so etwas wie: $ find . -name "*-*x*.jpg" | xargs rm -f $ find . -name "*-*x*.jpg" | xargs rm -f $ find . -name "*-*x*.jpg" | xargs rm -f ist zu weit von einem Hammer, weil myimage-300x250.jpg in einem Beitrag verwendet werden könnte. Seine 6 anderen Variationen sind willkommen, aber wegzugehen!

Ich denke, ich muss eine Liste der verwendeten Bilder erstellen, vergleichen Sie das mit meinem Verzeichnis und löschen Sie den Unterschied (ohne die Originale). Aber wie das geht, entgeht mir.


Die ” warum? ” -Seitenleiste:
Zusätzliche Bildgrößen auf dem Server sind im Allgemeinen keine große Sache, aber wir haben über 2,7 Gigs im Moment und es scheint nur eine Verschwendung zu sein, sie zu verlassen und zu sichern. Außerdem fangen wir gerade frisch an – warum nicht den Springsputz machen?

Was das Regenerieren der Daumen anbelangt, während das neue Design neue Bildspezifikationen hat, hat keiner von uns die Zeit, Hunderte von älteren Posts mit RTE-eingefügten Bildern zu aktualisieren. Lass vergangenes Vergangenes sein, sage ich.

Solutions Collecting From Web of "Wie lösche ich alle generierten Bilder von meinem Server außer denen, die derzeit in Posts verwendet werden?"

Dies sollte Ihnen den Einstieg erleichtern:

  1. Wiederholen Sie alle Posts und erstellen Sie ein Array mit verknüpften Bilddateien
  2. Wiederholen Sie alle Bildanhänge und überprüfen Sie, ob einer von ihnen verknüpft ist

Möglicherweise müssen Sie es stapelweise oder abhängig vom Server und der Anzahl der Posts, mit denen Sie arbeiten, das Zeitlimit und das Speicherlimit erhöhen.

 $posts = get_posts( array( 'posts_per_page' => -1, 'post_type' => array( 'post', 'page' ), ) ); $files = array(); foreach ( $posts as $post ) { if ( preg_match_all( '/src=(?:\'|")(.+?)(?:\'|")/', $post->post_content, $matches ) ) { foreach ( $matches[1] as $url ) { // Replace "wp-content/uploads/" with your upload directory if not default setup if ( preg_match( '!wp-content/uploads/(.+)$!', $url, $matches_2 ) ) $files[] = $matches_2[1]; } } } $posts = get_posts( array( 'posts_per_page' => -1, 'post_mime_type' => 'image', 'post_type' => 'attachment', 'fields' => 'ids', ) ); update_postmeta_cache( $posts ); foreach ( $posts as $post_id ) { if ( is_file( $file = get_attached_file( $post_id ) ) ) { if ( $meta = wp_get_attachment_metadata( $post_id ) ) { $path = dirname( $file ); if ( preg_match( '!^[0-9]{4}/[0-9]{2}/!', $meta['file'], $matches ) ) { // Split date folders with filename for when searching size variations $suffix = $matches[0]; } else { $suffix = ''; } if ( ! in_array( $meta['file'], $files ) ) { // Original file not in post content // unlink( $file ); } foreach ( $meta['sizes'] as $name => $data ) { if ( ! in_array( $suffix . $data['file'], $files ) ) { // Image size not in post content // unlink( "$path/{$data['file']}" ); } } } } else { wp_delete_post( $post_id, true ); // Might as well clean up } } 

Was Sie damit tun, liegt an Ihnen. Wenn Sie die Originalgröße wp_update_attachment_metadata( $post_id, $meta ) aber die Größenvariationen löschen, stellen Sie sicher, dass Sie ihre Existenz aus dem databaseeintrag in $meta['sizes'] wp_update_attachment_metadata( $post_id, $meta ) und mit wp_update_attachment_metadata( $post_id, $meta ) speichern.

Sie könnten sogar so weit gehen, die neuen Größen mit wp_get_image_editor() zu regenerieren & die alten src ‘s in Ihrem Post-Inhalt on-the-fly zu aktualisieren.